Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更新Tkinter标签?_Python_Tkinter - Fatal编程技术网

Python 如何更新Tkinter标签?

Python 如何更新Tkinter标签?,python,tkinter,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

我有一个简单的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() 

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

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

def add():
    global x
    x += 1
    label.configure(text=x)
。。。或者,您可以使用类似于
IntVar
(或者更一般地说,如果文本不仅仅是一个数字,则使用
StringVar
),在更新变量时会更新标签。如果这样做,请不要忘了配置
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将引发异常。

您必须通过将
命令关联到按钮来手动执行此操作。假设您希望在单击
按钮时更新
标签的文本

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

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

我就是这样做的,它对我来说很有用,也许有更优雅的方法来解决这个问题

整数是不可变的,当你做
x+=1
时,你给
x
分配一个新对象,而
标签仍然指向旧对象(嗯,有点…)。从
add
显式更新
l
,或者对
x
使用
IntVar
。您不需要
textvariable
。我知道。我的第一个解决方案不使用
textvariable
,但我的第二个解决方案使用。我计划在将来使用这个问题作为重复目标,因此我对问题和您的答案做了一些更改。如果您不喜欢编辑,请随时回滚所有内容。