使用新线程创建新的Tkinter窗口

时间:2016-03-10 02:44:42

标签: python multithreading tkinter

我试图创建一个在其自己的线程中运行mainloop的Tkinter GUI,使我能够在其他线程中运行(这可能涉及更新Tkinter GUI中的元素)。我有下面的结构。

import tkinter as tk
from threading import Thread

class DisplayWindow(object):

    def __init__(self):
        self.running = False

    def start(self):
        self.running = True
        self.thread = Thread(target = self.run)
        self.thread.start()

    def callback(self):
        self.running = False
        self.root.destroy()

    def run(self):
        self.root = tk.Tk()
        self.root.protocol('WM_DELETE_WINDOW', self.callback)
        self.root.geometry('600x600')

        tk.Label(self.root, text='Hello World').pack()

        self.root.mainloop()

我可以使用此

执行以下操作
win = DisplayWindow()
win.start()

我对其工作原理的理解是,第一次调用win.start()时,会创建一个新线程,设置为运行run方法,并启动线程。该线程执行Tkinter GUI的创建,该GUI运行mainloop直到窗口关闭(此时线程应该变为非活动状态)。如果我关闭窗口并再次调用win.start(),我希望第二个调用应该重复该过程,创建一个调用run方法的新线程。但是,第二次调用start只会导致python崩溃。

我做错了什么?

0 个答案:

没有答案