Python 与tkinter.mainloop()并发执行
我正在尝试使用tkinter制作一个GUI,它有一个刷新的显示。我有这个密码Python 与tkinter.mainloop()并发执行,python,tkinter,Python,Tkinter,我正在尝试使用tkinter制作一个GUI,它有一个刷新的显示。我有这个密码 while True: val= randint(1,50) 这是我的GUI的循环 label2= Label(root, text= val , font=("Helvetica", 60)) label2.place(relx=0.53, rely=0.44, anchor=CENTER) root.mainloop() 这两者似乎并不同时起作用。位于另一个循环之上的循环首先执行,这是一个无限循环,因
while True:
val= randint(1,50)
这是我的GUI的循环
label2= Label(root, text= val , font=("Helvetica", 60))
label2.place(relx=0.53, rely=0.44, anchor=CENTER)
root.mainloop()
这两者似乎并不同时起作用。位于另一个循环之上的循环首先执行,这是一个无限循环,因此它永远不会到达“root.mainloop()”。我想不断更新标签内容。怎么做?一种方法是使用
Tk.After(延迟、回调)
。您可以将while循环包装在函数中,并将其用作回调
例如:
def f():
val.set(randint(1,50))
root.after(1,f)
#Later
root.after(1, f)
root.mainloop()
还需要更改的一件事是如何在标签中设置val。它应该是
textvariable=val
而不是text=val
最后我可以用这个来修复它
while True:
val= randint(1,50)
label2.config(text=val)
label2.after(200, self.get_upvotes)
label2= Label(root, font=("Helvetica", 60))
label2.place(relx=0.53, rely=0.33, anchor=CENTER)
嘿,谢谢你的回复,我试着把While循环放在一个函数中,然后调用它
def():while True:val=randint(1,50)time.sleep(3)root.after(2000,f)root.mainloop()
但它似乎不起作用。由于无限While循环,程序从未到达root.mainloop,因此GUI窗口从未显示任何内容。弹出的窗口上没有任何内容,或者甚至没有弹出窗口?窗口正在弹出,但没有任何内容。这是更新While循环内的变量的问题。我可以看看怎么做,我不记得了。是的,请。。。那会很有帮助的。我还尝试了val=StringVar()和val.set('something')来更新标签内容,但我猜问题仍然存在。这是否回答了您的问题?将while循环放入线程任务中,或者使用after()
替换while循环。