Tk标签小部件不刷新

时间:2017-07-29 02:12:06

标签: python-3.x tkinter

from tkinter import*
hp = 10
def inc():
    global hp
    hp+=2
    mainloop()
def dec():
    global hp
    hp-=2
    mainloop()
master=Tk()
w = Label(master, text="Health = " + str(hp))
bu = Button(master, text="Increase", command=inc)
bd = Button(master, text="Decrease", command=dec)
bu.pack()
bd.pack()
w.pack()
while True:
    mainloop()

我想要显示整数变量的标签' hp'单击更改其值的按钮窗口小部件时更新。为什么不令人耳目一新?如果我将定义位置于tk位下方,我知道我会收到一个错误,指出按钮'命令不存在!

2 个答案:

答案 0 :(得分:0)

首先,你必须完全调用mainloop()一次,绝对不能无限循环。

另一方面,标签不会神奇地更新。您必须使用config方法更改标签小部件中显示的字符串。

答案 1 :(得分:0)

函数mainloop()本身就是一个循环(线索在名称中),所以你不要在无限循环中调用它。这将解决部分问题。

此外,您需要使用w.config(text="somenewlabeltext")来更改文本,因为您最初创建标签时,文本已设置,即使您更改hp,字符串也不会像您找到的那样发生变化。

您的最终代码可能如下所示:

from tkinter import *

hp = 10

def inc():
    global hp, w
    hp+=2
    w.config(text="Health = " + str(hp))

def dec():
    global hp, w
    hp-=2
    w.config(text="Health = " + str(hp))

master=Tk()

w = Label(master, text="Health = " + str(hp))
w.pack()

bu = Button(master, text="Increase", command=inc)
bu.pack()

bd = Button(master, text="Decrease", command=dec)
bd.pack()

mainloop()