Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的tkinter问题_Python_Multithreading_Timer_Tkinter - Fatal编程技术网

Python中的tkinter问题

Python中的tkinter问题,python,multithreading,timer,tkinter,Python,Multithreading,Timer,Tkinter,获得这项工作的最佳方式是什么?在showinfo上挂起的脚本: 我使用Python3。有没有一种方法可以让它在没有队列或额外导入的情况下工作 我不使用“after”方法,因为计时器可以停止或更改-我有很多计时器具有动态可变的间隔,这非常不方便。如这里所述: Tkinter不是线程安全的;除了主线程之外,您不能从任何地方访问Tkinter小部件 您应该删除计时器实例化。Tk有自己的工具来调度事件,称为after方法 from tkinter import * from tkinter.messag

获得这项工作的最佳方式是什么?在showinfo上挂起的脚本:

我使用Python3。有没有一种方法可以让它在没有队列或额外导入的情况下工作

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

如这里所述:

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

您应该删除
计时器
实例化。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()
这与在之后使用
实现的脚本相同。我还添加了一个
window.destroy()
调用来中断主循环


你的问题有几种解决方案。最简单的方法是使用
after\u cancel
方法停止执行回调。还值得注意的是
after
事件被绑定到一个小部件,因此如果拥有
after
的小部件被销毁,那么回调将永远不会执行

你试过实现这个吗?是的,但我需要计时器能够在之前停止或更改。您可以使用该方法取消由
之后启动的内容。这说明了怎么做,谢谢。不管怎样,有没有一种方法可以做到这一点,而不必在
等之后使用
?我有很多时间间隔可以动态变化的计时器,这很不方便。可能是重复的,谢谢。在
之后是否真的没有其他选项?我真的很喜欢和定时器一起工作,尤其是当我有很多定时器的时候(10-15)。使用
isAlive、finished、function、interval
等功能非常方便地控制它们。有很多选项。例如,您可以创建设置事件的计时器实例,然后使用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()