Tkinter的加载页面

问题描述 投票:0回答:1

我有以下问题。我想生成一个加载弹出窗口,通知用户计算机正在运行。但是,当我运行以下代码时,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()
python tkinter loading
1个回答
0
投票

@ 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()
© www.soinside.com 2019 - 2024. All rights reserved.