Загрузка страницы в Ткинтере - PullRequest
0 голосов
/ 27 февраля 2020

У меня следующая проблема. Я хочу, чтобы всплывающее окно с небольшой загрузкой уведомляло пользователя о работе компьютера Тем не менее, когда я запускаю следующий код, кажется, что 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()

1 Ответ

0 голосов
/ 27 февраля 2020

@ acw1668 нашел решение:

Поскольку mainl oop () еще не выполняется между lp.show_ () и stuff_that_takes_a_ while (), LoadPage не будет отображаться. Добавьте master.update () после lp.show_ ().

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...