Tkinter交通干扰

时间:2014-06-03 20:05:03

标签: multithreading python-3.x tkinter

我有一个通过Tkinter回调调用的昂贵函数:

def func:  # called whenever there is a mouse press in the screen.
   print("Busy? " + str(X.busy))  # X.busy is my own varaible and is initialized False.
   X.busy = True
   do_calculations()  # do_calculations contains several tk.Canvas().update() calls
   X.busy = False

当我点击太快时,func()似乎堆积了,因为打印出现了#34;忙碌? True",表示该功能还没有完成,我们正在另一个线程上启动它。

但是,print(threading.current_thread())始终给出< _MainThread(MainThread,启动123 ...)&gt ;, 123 ...对于给定的程序运行,每个打印始终是相同的。如何将同一个线程作为多个线程?

1 个答案:

答案 0 :(得分:1)

在我看来,您正在尝试进行递归消息处理。特别是,tk.Canvas().update()将处理所有待处理的消息,包括额外的按钮点击。此外,它将在同一个线程上执行此操作(至少在Windows上)。

因此,您的线程ID是常量,但您的堆栈跟踪将有多个嵌套调用func