我希望在tkinter窗口中看到不断更改标签的值。但是除非我在运行时在MS-CMD中进行键盘中断,否则我没有看到任何一个,这显示了标签的最新指定值。 Plz告诉我..发生了什么&什么是正确的代码?
import random
from Tkinter import *
def server() :
while True:
x= random.random()
print x
asensor.set(x)
app=Tk()
app.title("Server")
app.geometry('400x300+200+100')
b1=Button(app,text="Start Server",width=12,height=2,command=server)
b1.pack()
asensor=StringVar()
l=Label(app,textvariable=asensor,height=3)
l.pack()
app.mainloop()
答案 0 :(得分:1)
单击按钮时会调用函数server
,但该函数包含无限循环。它只是生成随机数并将其发送到asensor
。你可能没有看到它,因为server
函数在与GUI相同的线程中运行,它永远不会给标签提供更新的机会。
如果从代码中删除while True
位,则每次单击按钮时都会生成一个新编号。那是你想做的吗?
OP评论后编辑:
我明白了。在这种情况下,您的代码应更改如下:
import random
from Tkinter import Tk, Button, Label, StringVar
def server():
x = random.random()
print x
asensor.set(x)
def slowmotion():
server()
app.after(500, slowmotion)
app = Tk()
app.title("Server")
app.geometry('400x300+200+100')
b1 = Button(app, text="Start Server", width=12, height=2, command=slowmotion)
b1.pack()
asensor = StringVar()
asensor.set('initial value')
l = Label(app, textvariable=asensor, height=3)
l.pack()
app.mainloop()
我还引入了一个新函数slowmotion
,它执行两项操作:1)调用server
,更新显示值,2)调度自身在500ms内再次执行。首次点击按钮时首先运行slowmotion
。
代码的问题在于它在主GUI线程中运行无限循环。这意味着一旦server
运行,GUI将不会停止,也不会显示您要求它显示的文本。