繁体   English   中英

更改Tkinter标签

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM