2013-02-28 8 views
1

Я довольно новый программист, и я был бы признателен, если бы вы могли мне помочь. Я просмотрел Google, но есть несколько примеров с «Twisted + Tkinter». Когда я нажимаю «Отправить» кнопку в окне я получаю эту ошибку:AttributeError: объект 'str' не имеет атрибута 'insert'

Ошибка является e.insert (0, м) AttributeError: «ул» объект не имеет атрибута «вставить»

а также код:

from Tkinter import * 
from twisted.internet import reactor, tksupport 

class App(object): 
    def onQuit(self): 
     print "Quit!" 
     reactor.stop() 

    def onButton(self): 
     m=self.entryvar.get() 
     e=self.labeltext.get() 
     e.insert(0,m) 

def __init__(self, master): 
    frame = Frame(master) 
    frame.pack() 

    self.entryvar=StringVar() 
    self.mes=Entry(frame,textvariable=self.entryvar) 
    self.mes.pack() 

    self.labeltext=StringVar() 
    self.label=Label(frame,textvariable=self.labeltext) 
    self.label.pack() 

    q = Button(frame, text="Quit!", command=self.onQuit) 
    b = Button(frame, text="Send", command=self.onButton) 
    q.pack(side=LEFT) 
    b.pack(side=LEFT) 

if __name__ == '__main__': 
    root = Tk() 
    tksupport.install(root) 
    app = App(root) 
    reactor.run() 
+1

Что вы ожидаете, когда будете называть 'insert()' ? Вы управляете строкой метки, как если бы она была измененным списком, но 'str' не является изменчивым типом последовательности. –

+0

Я пытаюсь изменить текст на ярлыке «labeltext» с записью «entryvar» – billwild

+0

Для чего это стоит, похоже, не имеет ничего общего с Twisted. – Glyph

ответ

3

Если вы хотите обновить labeltextStringVar, вам нужно построить новое значение строку для него. str - неизменный тип последовательности, и в отличие от list не может быть изменен на месте.

В этом случае, возможно, вы хотели использовать конкатенацию строк? Следующий код устанавливается labeltext к m + e, где e является предыдущим содержимым labeltext, эффективно предваряя m:

def onButton(self): 
    m=self.entryvar.get() 
    e=self.labeltext.get() 
    self.labeltext.set(m + e) 
+0

Спасибо, ошибка исчезла, но ничего не произошло в окне. Есть идеи? – billwild

+0

@billwild: Имеет ли 'entryvar' * значение *? Если он пуст, то «labeltext» будет отображаться без изменений. Вы можете попробовать отладить это, изменив вызов '.set()' на self.labeltext.set ('m:' + m + ', e:' + e) ​​', например. –

+0

Должен ли я сделать self.entryvar = StringVar()/n self.entryvar.set ("something") – billwild

1

Если вы хотите заменить текст этикетки с вводом текстом

def onButton(self): 
    entry_text = self.entryvar.get() 
    self.labeltext.set(entry_text) 

Или, если вы хотите для добавления текста ввода перед текстом метки

def onButton(self): 
    entry_text = self.entryvar.get() 
    label_text = self.labeltext.get() 
    self.labeltext.set(entry_text + " " + label_text) 
+0

Ошибка исчезла, но ничего не произошло в окне – billwild

Смежные вопросы