2017-07-29 60 views
0
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位以下,我知道我会得到一个错误,指出按钮的命令不存在!Tk标签小部件不刷新

回答

0

其中之一,你必须拨打mainloop()一次,绝对不是在一个无限循环。

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

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