python3 tkinter,试图更新标签

时间:2011-06-15 19:54:19

标签: python-3.x tkinter

我在这里看了一些其他的答案,但我不明白该怎么做。这是我想出的最好的。

为了消除偏离主题的评论,我更喜欢网格覆盖,我也喜欢widget.configure的处理方式,因此每行代码都可以完成一个逻辑事务。

在代码的最后,我有self.root.update()我也离开了自我。没有运气。

from tkinter import *

class Application:
    def __init__(self, master):
        frame1 = Frame(master)
        frame1.grid(row=1, column=1)

        self.btnQuit = Button(frame1)
        self.btnQuit.configure(text="QUIT")
        self.btnQuit.configure(fg="red")
        self.btnQuit.configure(command=frame1.quit)
        self.btnQuit.grid(row=1, column=1)

        self.btnHi = Button(frame1)
        self.btnHi.configure(text="hi there")
        self.btnHi.configure(command="self.hello")
        self.btnHi.grid(row=2, column=1)

        self.lblMessage = Label(frame1)
        self.lblMessage.grid(row=2, column=2)

        def hello(self):
            self.lblMessage.configure(text="hello there")
            self.root.update()

root = Tk()
program = Application(root)
root.mainloop()

4 个答案:

答案 0 :(得分:2)

如上所述:

self.btnHi.configure(command="self.hello")

应该是:

self.btnHi.configure(command=self.hello)

并注意线条的缩进。但是:

self.v = StringVar()
self.lblMessage = Label(frame1, textvariable=self.v)

在你的hello方法中,使用:

self.v.set("hello there")

答案 1 :(得分:1)

  1. 您必须为command选项提供一个可调用的对象 - 而不是一个字符串eval'd(无论如何它都不会起作用,因为它的范围非常不同,例如没有/不同的self)。 http://infohost.nmt.edu/tcc/help/pubs/tkinter/button.html似乎证实了这一点。
  2. 您的代码在您的问题中缩进的方式,您在hello内定义本地函数__init__,而不是在类级别(作为方法)定义它。您需要从def hello
  3. 开始删除一级缩进

答案 2 :(得分:0)

我不清楚你要做什么,但如果你想在创建后更改Label的内容,那么你需要使用StringVar()对象。将其设置为Label的textvariable参数(在其构造函数中)将意味着只要更新StringVar的值(使用其set()方法),Label就会更新。

答案 3 :(得分:0)

请试试这个:

from tkinter import *

    class Application:
        def __init__(self, master):
            frame1 = Frame(master)
            frame1.grid(row=1, column=1)

            self.btnQuit = Button(frame1)
            self.btnQuit.configure(text="QUIT")
            self.btnQuit.configure(fg="red")
            self.btnQuit.configure(command=frame1.quit)
            self.btnQuit.grid(row=1, column=1)

            self.btnHi = Button(frame1)
            self.btnHi.configure(text="hi there")
            self.btnHi.configure(command=self.hello)
            self.btnHi.grid(row=2, column=1)

            self.lblMessage = Label(frame1)
            self.lblMessage.grid(row=2, column=2)

        def hello(self):
            self.lblMessage.configure(text="hello there")
            self.root.update()

    root = Tk()`enter code here`
    program = Application(root)
    root.mainloop()