用另一个线程启动Tk.mainloop()线程

时间:2019-05-22 18:47:06

标签: multithreading tkinter

我想在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运行时运行其他线程?

1 个答案:

答案 0 :(得分:1)

您可以在其他线程中运行代码。问题不是本身而是多个线程,而是您在多个线程中拥有了tkinter代码。所有的tkinter代码都必须在一个线程中。

通常,最好使您的主线程(创建小部件并启动mainloop)并在辅助线程或进程中运行其他代码。您可以使用线程安全队列在线程之间发送信息,例如将结果传递回GUI时。