如何保持在while (True):
循环更新tkinter
帆布,什么样的?如何使用Tkinter持续刷新画布?
我知道,你可以做after(1000 , refresh_function);
,但如何使循环重复下去吗?
实例:绘制具有固定长度的线的角度,并将该角度不断增加(因此该线旋转/旋转)的程序。
我想我已经查看了这里所有相关的问题,但是这可能仍然是一个重复的,如果是,我很抱歉。
如何保持在while (True):
循环更新tkinter
帆布,什么样的?如何使用Tkinter持续刷新画布?
我知道,你可以做after(1000 , refresh_function);
,但如何使循环重复下去吗?
实例:绘制具有固定长度的线的角度,并将该角度不断增加(因此该线旋转/旋转)的程序。
我想我已经查看了这里所有相关的问题,但是这可能仍然是一个重复的,如果是,我很抱歉。
要更新使用TKinter窗口(用帆布等),你需要root.mainloop()
,相当于在:
while 1:
root.update()
噢好吧。我在google上找到了关于update()的信息,但是你的回答更加清晰。我认为mainloop()实际上是让窗口保持活动状态,并且在调用mainloop之前窗口不存在。愚蠢。谢了哥们! –
这是一个不好的做法。虽然技术上它可以工作,但这不是一个特别好的解决方案。您的GUI不会像其他解决方案那样顺畅地响应事件。 –
也许类threading.Timer可以帮助你
def f():
# write our code for repainting canvas
# call f() again in 60 seconds
threading.Timer(60, f).start()
# start calling f now and then every 60 sec
f()
哈哈,我真是个笨蛋。我试着这样做: '高清_my_mainloop(个体经营): #CODE self.after(60 self._my_mainloop)' ,我只是得到了一个堆栈溢出。 感谢您的回答! –
我提出线程,以避免“而真正的”循环可能导致GUI冻结..欢迎您 –
一个while True:
环路与使用.mainloop()
不兼容。您可以通过在退出之前重新调度自己来重复某个功能。其他答案中有几个例子,比如让一些东西在画布上滑行。这是另一个说明这个想法的例子。
import tkinter as tk
root = tk.Tk()
text = tk.StringVar(root)
label = tk.Label(root, textvariable=text)
label.pack()
def add_a():
text.set(text.get()+'a')
root.after(500, add_a) # <== re-schedule add_a
root.after(500, add_a) # <== start the repeating process
root.mainloop()
我发现我在我的执行结束时得到一个错误,当我用,而真正的:...这是一个令人钦佩的方法。我很喜欢!谢谢。 –
root.update()? – Unknown
我只是瞪着它,谢谢,那正是我需要的:) –
所以我会为它添加一个答案;) – Unknown