如何通过线程打开新的tkinter窗口?

时间:2016-01-27 10:48:21

标签: python tkinter

我想使用线程打开一个启动窗口并显示加载文件页面。 我写了一个简单的代码来打开一个新窗口并在1秒后关闭:

import Tkinter as  tk
from threading import Thread as thread
import time

class T():  
    def det(self):
        self.x = tk.Tk()
        self.x.mainloop()
    def det2(self):
        self.x.destroy()

k = T()
ts = thread(target=k.det, args=())
ts.start()
time.sleep(1)
k.det2()

尝试运行时,所有步骤都可以,但此代码从未完成!在self.x.destroy(),它被绞死了。为什么会发生这种情况?

3 个答案:

答案 0 :(得分:1)

对于像这样简单的事情,你实际上并不需要线程,只需使用after函数:

import Tkinter as tk
root = tk.Tk()
root.after(1000, root.destroy)
root.mainloop()

答案 1 :(得分:0)

使用__init__self.x之外创建det

import Tkinter as  tk
from threading import Thread as thread
import time

class T():
    def __init__(self):
        self.x = tk.Tk()  
    def det(self):
        self.x.mainloop()
    def det2(self):
        self.x.destroy()

k = T()
ts = thread(target=k.det, args=())
ts.start()
time.sleep(1)
k.det2()

答案 2 :(得分:-1)

经过多次搜索后,我找到了这个解决方案。不应该在线程中创建Tk实例(mainloop sholud在线程之外),但它可以在线程中关闭:

import Tkinter as  tk
from threading import Thread as thread
import time

class T():
    def det2(self,x):
        time.sleep(2)
        x.destroy()

x = tk.Tk()
ts = thread(target=T().det2, args=(x,))
ts.daemon = True
ts.start()
x.mainloop()
相关问题