2014-10-08 64 views
1

我試圖從另一個函數更改我的Tkinter Label文本。不知何故,我不能參考Label,因此不改變標籤,只在舊的上面添加一個新的。與Tkinter標籤更改文本的Python參考

self.errorLabel['text'] = 'second'在Window的init函數內部工作,但我需要能夠從另一個函數執行,因此引起某種參考錯誤。

這是我的代碼:

import sys 
from tkinter import * 
from tkinter import ttk 

class Window(Frame): 

    def __init__(self, master = None): 
     Frame.__init__(self, master) 
     self.master = master 
     self.errorLabel = Label(self, text="some text").grid(row=0) 
     self.init_window() 

    def init_window(self): 
     self.master.title("Example") 
     self.pack(fill=BOTH, expand=1) 

     goButton = Button(self, text="Go!", command=self.client_go).grid(row=1, column=1) 
     quitButton = Button(self, text="Close", command=self.client_exit).grid(row=1, column=0) 

    def client_exit(self): 
     exit() 

    def client_go(self): 
     self.errorLabel['text'] = 'second' # TypeError: 'NoneType' object does not support item assignment 
     self.errorLabel = Label(self, text="second").grid(row=0) 
     return 

root = Tk() 
root.geometry("800x500") 
app = Window(root) 
root.mainloop() 

回答

3

這是Tkinter的代碼的一個非常常見的錯誤。 Widget.grid回報None,所以當你寫:

self.errorLabel = Label(self, text="some text").grid(row=0) 

self.errorLabelNone。相反,創建該小部件並在不同的代碼行中使用它的幾何管理器:

self.errorLabel = Label(self, text="some text") 
self.errorLabel.grid(row=0) 
+0

工程就像一個魅力!十分感謝。我會盡快接受。 – Rhyder 2014-10-08 19:32:05