【问题标题】:How to make a Tkinter label update?如何进行 Tkinter 标签更新?
【发布时间】:2015-02-03 16:01:08
【问题描述】:

我有一个简单的 tkinter GUI,带有一个显示数字和一个按钮的标签。我将它设置为变量 x,当按下按钮时,x 的值增加一。但是,当我点击按钮时,标签不会更新。我该怎么做?

from tkinter import *

x = 1
def add():
    global x
    x += 1

win = Tk()

label = Label(win, text=x)
label.pack()

button = Button(win, text="Increment", command=add)
button.pack()

win.mainloop() 

【问题讨论】:

  • 整数是不可变的,当您执行x += 1 时,您将一个新对象 分配给x,而Label 仍然指向旧的(嗯,有点......)。要么从 add 显式更新 l,要么将 IntVar 用于 x

标签: python tkinter


【解决方案1】:

配置标签的text 是一次性效果。稍后更新 int 不会更新标签。

要解决这个问题,您可以自己显式更新标签:

def add():
    global x
    x += 1
    label.configure(text=x)

... 或者您可以使用 tkinter variable 之类的 IntVar(或更一般地说,如果您的文本不只是数字,则使用 StringVar),确实更新更新 var 时的标签。如果您这样做,请不要忘记配置 textvariable 而不是 text

from tkinter import *

win = Tk()

x = IntVar()
x.set(1)
def add():
    x.set(x.get() + 1)

label = Label(win, textvariable=x)
label.pack()

button = Button(win, text="Increment", command=add)
button.pack()

win.mainloop()

注意在创建IntVar之前创建一个Tk()实例,否则tkinter会抛出异常。

【讨论】:

  • 你不需要textvariable
  • 我知道。我的第一个解决方案不使用textvariable,但我的第二个解决方案使用了。
  • 我打算以后用这个问题作为重复目标,所以我对问题和你的答案做了一些修改。如果您不喜欢这些编辑,请随意回滚所有内容。
【解决方案2】:

您必须通过单击按钮将command 关联起来手动完成。假设您希望在单击button 时更新Label 的文本:

button = Button(win, text="One", command=add) # add() is called when button is clicked

现在,您定义add 命令/函数以更改标签中的文本:

def add():
    global x
    x += 1
    label.config(text=x) # calling the method config() to change the text

【讨论】:

    【解决方案3】:

    我所做的是使用一个 IntVar() 和一个加减法:

    *outside the class body*
    def plus1(self,var,l):
        var.set(int(var.get())+1)
        l.textvariable = var
        return var.get()
    
    *Inside the body of your class*
    self.your_text = IntVar()
    self.your_text.set(0)
    
    self.l = Label(master, textvariable = (self.your_text))
    self.plus_n = Button(root,text = '+',command=lambda : self.your_text.set(self.plus1(self.your_text,self.l) ) 
    

    我就是这样做的,它对我有用,可能有更优雅的方法来解决问题

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2014-08-01
      相关资源
      最近更新 更多