首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的tkinter问题

Python中的tkinter问题
EN

Stack Overflow用户
提问于 2014-07-29 10:56:40
回答 1查看 121关注 0票数 0

获得这项工作的最佳方法是什么?剧本挂在展示资讯上

代码语言:javascript
复制
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。有没有一种不需要队列或额外导入就能让它工作的方法?

我不使用“后”方法,因为计时器可以停止或更改-我有许多动态变化的时间间隔,这是非常不方便的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-29 11:20:00

如此处所讨论的:python tkinter with threading causing crash

Tkinter不是线程安全的;除了主线程之外,您不能从任何地方访问Tkinter小部件。

您应该删除Timer实例化。Tk有自己的工具来调度事件,称为after方法。

代码语言:javascript
复制
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的小部件被销毁,回调将永远不会执行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25013671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档