我想在Tk.mainloop()运行时执行一些代码,所以我认为我需要线程模块。
我试图将Tk.mainloop()
放入线程类的run
方法中,然后将要运行的代码放入mainloop在另一个线程中运行。
from threading import Thread
import tkinter as tk
class MyThread(Thread):
def __init__(self):
Thread.__init__(self)
def run():
# window is tk.Tk()
window.mainloop()
class MyCode(Thread):
# my code
TkinterThread = MyThread()
TkinterThread.start()
OtherThread = MyCode()
OtherThread.start()
tkinter向我报告错误
RuntimeError: Calling Tcl from different apartment
所以我在Internet上进行了搜索,我了解到mainloop只能从线程中耗尽,因为只有其中之一可以工作。 那么,有没有办法在mainloop运行时运行其他线程?
答案 0 :(得分:1)
您可以在其他线程中运行代码。问题不是本身而是多个线程,而是您在多个线程中拥有了tkinter代码。所有的tkinter代码都必须在一个线程中。
通常,最好使您的主线程(创建小部件并启动mainloop
)并在辅助线程或进程中运行其他代码。您可以使用线程安全队列在线程之间发送信息,例如将结果传递回GUI时。