获得这项工作的最佳方法是什么?剧本挂在展示资讯上
from tkinter import *
from tkinter.messagebox import *
from threading import Timer
def timerDone():
showinfo('Alert','Alert')
window = Tk()
mainTimer = Timer(3, timerDone)
mainTimer.start()
window.mainloop()我使用Python3。有没有一种不需要队列或额外导入就能让它工作的方法?
我不使用“后”方法,因为计时器可以停止或更改-我有许多动态变化的时间间隔,这是非常不方便的。
发布于 2014-07-29 11:20:00
如此处所讨论的:python tkinter with threading causing crash
Tkinter不是线程安全的;除了主线程之外,您不能从任何地方访问Tkinter小部件。
您应该删除Timer实例化。Tk有自己的工具来调度事件,称为after方法。
from tkinter import *
from tkinter.messagebox import *
def timerDone(window):
showinfo('Alert','Alert')
window.destroy()
window = Tk()
window.after(3000,lambda:timerDone(window))
window.mainloop()这与使用after实现的脚本相同。我还添加了一个window.destroy()调用来中断主循环。
你的问题有几个解决方案。最简单的方法是使用after_cancel方法来阻止回调的执行。值得注意的是,after事件被绑定到一个小部件上,因此如果拥有after的小部件被销毁,回调将永远不会执行。
https://stackoverflow.com/questions/25013671
复制相似问题