我正在尝试实现一个弹出窗口,该窗口应在后台进行操作时显示在主窗口上。从下面的代码中按下按钮会导致GUI冻结10秒钟而不显示任何消息,并最终使按钮变为绿色。冻结是正常的,但是我希望在10秒钟内显示弹出窗口。任何帮助,将不胜感激!提前致谢!
import tkinter as tk
import time
class GUI(tk.Tk):
def __init__(self):
super().__init__()
self.button1 = tk.Button(text="Start", command=self.make_green)
self.button1.pack()
def popup(self):
tl = tk.Toplevel(self)
tl.transient()
tk.Label(tl, text="Painting green").pack()
tl.grab_set()
return tl
def make_green(self):
wait_popup = self.popup()
time.sleep(10)
self.button1.config(bg="green")
wait_popup.destroy()
a = GUI()
a.mainloop()
问题来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您可以在代码中使用self.update()使弹出窗口出现。
import tkinter as tk
import time
class GUI(tk.Tk):
def __init__(self):
super().__init__()
self.button1 = tk.Button(text="Start", command=self.make_green)
self.button1.pack()
def popup(self):
tl = tk.Toplevel(self)
tl.transient()
tk.Label(tl, text="Painting green").pack()
self.update()
tl.grab_set()
return tl
def make_green(self):
wait_popup = self.popup()
time.sleep(10)
self.button1.config(bg="green")
wait_popup.destroy()
a = GUI()
a.mainloop()
或者您可以使用线程。
首先从线程导入线程。
from threading import Thread
然后做一个新方法
def thread_it(self):
return Thread(target=self.make_green, daemon=True).start()
并更新按钮的命令
self.button1 = tk.Button(text="Start", command=self.thread_it)
回答来源:stackoverflow