如何更新Tkinter标签?

时间:2015-02-03 16:01:09

标签: python tkinter

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

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() 

3 个答案:

答案 0 :(得分:3)

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

要解决此问题,您可以自己明确更新标签:

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

...或者,如果您的文字不仅仅是一个数字,那么您可以IntVar使用StringVar(或更常见的是textvariable,<更新var时,em> 更新标签。如果您这样做,请不要忘记配置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()

Tk()

在创建IntVar之前,请务必创建{{1}}实例,否则tkinter会抛出异常。

答案 1 :(得分:3)

您必须通过将command与单击按钮相关联来手动执行此操作。假设您希望在点击Label时更新button的文字:

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

答案 2 :(得分:1)

我所做的是使用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) ) 

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