繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM