Python 与tkinter.mainloop()并发执行

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() 这两者似乎并不同时起作用。位于另一个循环之上的循环首先执行,这是一个无限循环,因

我正在尝试使用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()

这两者似乎并不同时起作用。位于另一个循环之上的循环首先执行,这是一个无限循环,因此它永远不会到达“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循环。