[英]How can open new tkinter window by threading?
我想使用线程打开启动窗口并显示加载文件页面。 我编写了一个简单的代码来打开一个新窗口,并在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()
挂起。 为什么要这样?
对于这样简单的事情,您实际上不需要线程,只需使用after
函数即可:
import Tkinter as tk
root = tk.Tk()
root.after(1000, root.destroy)
root.mainloop()
使用__init__
在det
外部创建self.x
:
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()
经过多次搜索,我找到了解决方案。 Tk实例不应该在线程中创建( mainloop
应该在线程之外),但是它可以在线程中关闭:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.