[英]python - change tkinter label
以下腳本創建一個帶有文本標簽,退出按鈕和更改文本按鈕的tkinter窗口:
from tkinter import *
from tkinter import ttk
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
test_label = Label(root, text="none").grid(row=0, column=0, sticky=W)
change_text_btn = Button(root, text="change_text", command=self.set_label_text).grid(row=2, column=0, sticky=W)
exit_btn = Button(root, text="Exit", command=self.client_exit).grid(row=2, column=1, sticky=W)
def set_label_text(self):
test_label.config(text='changed the value')
def client_exit(self):
exit()
if __name__ == '__main__':
root = Tk()
app = Window(root)
root.mainloop()
單擊change_text_btn
后,我得到一個NameError: name 'test_label' is not defined
錯誤。 所以問題是, test_label
中創建init_window()
是不是從avaliable set_label_text()
怎么一回事,因為范圍。 我如何解決它?
為了解決這個問題,您可以在test_label
實例變量前加上self
前綴,以使其成為實例變量。 除此之外,當您像這樣鏈接方法時,發生的事情是您將None
分配給變量,因為grid()
返回None
而是將每個方法放在單獨的行中(這代表所有按鈕):
self.test_label = Label(root, text="none")
self.test_label.grid(row=0, column=0, sticky=W)
當然,稍后需要在set_label_text
函數中使用self.test_label
進行引用。
除此之外,我建議您擺脫from tkinter import *
,因為您不知道該導入的名稱。 它可以替換您先前導入的名稱,並且很難查看程序中的名稱。 使用import tkinter as tk
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.