我想使用线程打开一个启动窗口并显示加载文件页面。 我写了一个简单的代码来打开一个新窗口并在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()
,它被绞死了。为什么会发生这种情况?
答案 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()