2013-03-22 111 views
1

對Python很新穎(2.7)即時學習GUI設計(Tkinter)並繼續運行到不同的語法/無調用方法/全局名稱未定義錯誤嘗試實現單擊按鈕時,Entry對象的簡單標籤文本更改。可有人告訴我正確的語法作用Python 2.7 Tkinter更改按鈕事件上的標籤文本

from Tkinter import * 
class Part3: 

def __init__(self, parent): 

    GUIFrame =Frame(parent,width= 300, height=200) 
    GUIFrame.pack(expand = False, anchor = CENTER) 
    entry = Entry(text="enter your choice") 
    entry.place(x=65, y = 10) 
    self.test = StringVar() 
    self.test.set('''Hi, I'm a Label :)''') 
    self.Label1 = Label(parent, textvariable = self.test) 
    self.Label1.place(x = 85, y = 100) 
    self.Button2 = Button(parent, text='edit',command=self.LabelChange) 
    self.Button2.place(x= 80, y = 60) 
    self.Button3 = Button(parent, text='exit', command= parent.quit) 
    self.Button3.place(x= 160, y = 60) 


def LabelChange(self): 

    test = self.entry.get() 
    self.Label1(test) 


root = Tk() 
MainFrame =Part3(root) 
root.title('Input Test') 
root.mainloop() 

的想法是對的「編輯」(按鈕2)單擊,Label1文本更改爲條目的文本。

+1

您需要修復示例代碼的縮進。另外,我鼓勵你不要使用'place'開始 - 使用這將創建具有較差調整行爲的GUI。花一兩個小時學習'pack'或'grid' - 有一個小小的學習曲線,但是你的GUI會更好。 – 2013-03-22 22:07:01

回答

1

嘗試:

self.entry = Entry(text="enter your choice") 
... 
test = self.entry.get() 
self.test.set(test) 

我知道大多數的教程給使用textvariables的例子,但在大多數情況下,你不需要他們。您可以在不使用文本變量的情況下獲取並設置小部件中的值。文本變量主要用於對變量進行跟蹤。可變軌跡是一種您幾乎不需要的稍微先進的技術。

+0

test = self.entry.get() AttributeError:Part3實例沒有屬性'entry' – 2013-03-22 22:09:05

+0

@GeorgeDay:抱歉。我沒有意識到你沒有保存對入口小部件的引用。我已經更新了我的答案。 – 2013-03-22 22:12:34

+0

沒有更多的錯誤拋出,但新的代碼不會對Label1產生影響 – 2013-03-22 22:17:52

0
from Tkinter import * 
class Part3: 

def __init__(self, parent): 

    GUIFrame =Frame(parent,width= 300, height=200) 
    GUIFrame.pack(expand = False, anchor = CENTER) 
    self.entry = Entry(text="enter your choice") # this needs to be in self 
    self.entry.place(x=65, y = 10) 
    self.test = StringVar() 
    self.test.set('''Hi, I'm a Label :)''') 
    self.Label1 = Label(parent, textvariable = self.test) 
    self.Label1.place(x = 85, y = 100) 
    self.Button2 = Button(parent, text='edit',command=self.LabelChange) 
    self.Button2.place(x= 80, y = 60) 
    self.Button3 = Button(parent, text='exit', command= parent.quit) 
    self.Button3.place(x= 160, y = 60) 


def LabelChange(self): 
    self.test.set(self.entry.get()) 

root = Tk() 
MainFrame =Part3(root) 
root.title('Input Test') 
root.mainloop() 
root.destroy() 
0

使用可以使用.after命令。例如:

 Lbl = Label(text='Hi') 
    def change(): 
     Lbl.after(3000, lambda: Lbl.config(text="hola") 
     # Or you can use the one below to remove delay. 
     Lbl.config(text='hola') 
     return change 
    Btn = Button(command=change()) 
    Lbl.pack() 
    Btn.pack()