我有以下问题。我想生成一个加载弹出窗口,通知用户计算机正在运行。但是,当我运行以下代码时,stuff_that_takes_a_while()似乎立即执行,然后弹出窗口出现了(弹出窗口确实来了,因为它显示了我删除lp.close_()时的情况)。我认为Python作为一种脚本语言可以按顺序执行指令。任何理论为什么这不起作用?非常感谢您的帮助。
from Tkinter import *
def stuff_that_takes_a_while():
#stuff
pass
class LoadPage():
def show_(self):
self.popup.geometry("500x100") #Width x Height
label = Label(self.popup, text=self.text, font="Arial 11")
label.pack(side="top", fill="x", pady=10)
self.popup.transient(master) #set to be on top of the main window
self.popup.grab_set() #hijack all commands from the master (clicks on the main window are ignored)
def close_(self):
self.popup.destroy()
def __init__(self, text):
self.text = text
self.popup = Toplevel(master)
pass
if __name__ == "__main__":
master = Tk()
lp = LoadPage("Loading...")
lp.show_()
stuff_that_takes_a_while()
lp.close_()
mainloop()
@ acw1668找到了解决方案:
因为mainloop()尚未在lp.show_()和stuff_that_takes_a_while()之间执行,所以不会显示LoadPage。在lp.show_()之后添加master.update()。
from Tkinter import *
def stuff_that_takes_a_while():
#stuff
pass
class LoadPage():
def show_(self):
self.popup.geometry("500x100") #Width x Height
label = Label(self.popup, text=self.text, font="Arial 11")
label.pack(side="top", fill="x", pady=10)
self.popup.transient(master) #set to be on top of the main window
self.popup.grab_set() #hijack all commands from the master (clicks on the main window are ignored)
def close_(self):
self.popup.destroy()
def __init__(self, text):
self.text = text
self.popup = Toplevel(master)
pass
if __name__ == "__main__":
master = Tk()
lp = LoadPage("Loading...")
lp.show_()
master.update()
stuff_that_takes_a_while()
lp.close_()
mainloop()