python标签没有动态变化

时间:2014-02-05 11:18:14

标签: python tkinter

我希望在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()

1 个答案:

答案 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将不会停止,也不会显示您要求它显示的文本。