[英]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.