更新标签上的文字

问题描述

我正在通过tkinter上的Oreilly教程,但是该教程中提供的代码对我不起作用。没有显示“选择一个”消息,而是显示PY_VAR0。当我单击hello按钮时,什么都没有发生。当我单击“再见”按钮时,窗口将按预期关闭,但未显示任何消息。

值得注意的是,我之前有过

def say_hello(self):
  self.label.configure(text="Hello World!")

def say_goodbye(self):
  self.label.configure(text="Goodbye! \n (Closing in 2 seconds)")
  self.after(2000,self.destroy)

并收到属性错误:attributeError:'_tkinter.tkapp'对象没有属性'label'site:stackoverflow.com。

我不确定这是怎么回事,因为我在两种情况下都明确遵循了示例。

我的代码如下:

import tkinter as tk

class Window(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Hello Tkinter')
        self.label_text = tk.StringVar()
        self.label_text.set("Choose One")

        label = tk.Label(self,text=self.label_text)
        label.pack(fill=tk.BOTH,expand=1,padx=100,pady=30)

        hello_button = tk.Button(self,text='Say Hello',command=self.say_hello)
        hello_button.pack(side=tk.LEFT,padx=(20,0),pady=(0,20))

        goodbye_button = tk.Button(self,text ='Say Goodbye',command=self.say_goodbye)

        goodbye_button.pack(side=tk.RIGHT,padx=(0,20),20))


    def say_hello(self):
        self.label_text.set("Hello World!")

    def say_goodbye(self):
        self.label_text.set("Goodbye! \n (Closing in 2 seconds)")
        self.after(2000,self.destroy)


if __name__ == "__main__":
    window = Window()
    window.mainloop()

解决方法

您需要设置标签textvariable=self.label_text而不是text=self.label_text

import tkinter as tk


class Window(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Hello Tkinter')
        self.label_text = tk.StringVar()
        self.label_text.set("Choose One")

        label = tk.Label(self,textvariable=self.label_text)
        label.pack(fill=tk.BOTH,expand=1,padx=100,pady=30)

        hello_button = tk.Button(self,text='Say Hello',command=self.say_hello)
        hello_button.pack(side=tk.LEFT,padx=(20,0),pady=(0,20))

        goodbye_button = tk.Button(self,text ='Say Goodbye',command=self.say_goodbye)

        goodbye_button.pack(side=tk.RIGHT,padx=(0,20),20))


    def say_hello(self):
        self.label_text.set("Hello World!")

    def say_goodbye(self):
        self.label_text.set("Goodbye! \n (Closing in 2 seconds)")
        self.after(2000,self.destroy)


if __name__ == "__main__":
    window = Window()
    window.mainloop()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...