Закройте приложение Tkinter, вызвав метод класса. ⇐ Python
-
Anonymous
Закройте приложение Tkinter, вызвав метод класса.
Я пытаюсь создать заставку, которую я смогу вызвать из внешнего приложения с помощью Tkinter. Я хотел бы определить свой графический интерфейс в классе, например:
класс Splash: защита __init__(сам): self.root = tk.Tk() self.root.overrideredirect(True) self.root.wm_attributes("-topmost", True) self.label = tk.Label(self.root, text="Инициализация...") self.label.pack(side=tk.BOTTOM) self.progbar = ttk.Progressbar(self.root, orient=tk.HORIZONTAL, mode='indeterminate') self.progbar.pack(fill=tk.BOTH,side=tk.BOTTOM,padx=10) self.progbar.start(40) self.root.update_idletasks() self.root.geometry( "+{}+{}".format( int((self.root.winfo_screenwidth() - self.root.winfo_reqwidth()) / 2), int((self.root.winfo_screenheight() - self.root.winfo_reqheight()) / 2), ) ) корень.mainloop() защита закрытия (сам): self.root.destroy() Цель состоит в том, чтобы во внешнем приложении я мог создать объект Splash, запустить инициализацию, а затем вызвать функцию close в Splash< /code> объект, чтобы закрыть заставку, например:
время импорта импортировать всплеск х = Всплеск.Всплеск() time.sleep(5) # Здесь происходит инициализация приложения. х.закрыть() Это не работает, поскольку root.mainloop() блокируется, и функции инициализации фактически никогда не достигаются. Этот вариант также не работает:
класс Splash: closeRequest = Ложь защита __init__(сам): # Все до root.mainloop(), как показано выше, находится здесь пока не self.closeRequest: self.root.update_idletasks() self.root.update() защита закрытия (сам): self.closeRequest = Истина Как я могу достичь своей цели? Я бы предпочел не использовать для этого потоки, но, пожалуйста, не стесняйтесь также делиться решениями на основе потоков.
Я пытаюсь создать заставку, которую я смогу вызвать из внешнего приложения с помощью Tkinter. Я хотел бы определить свой графический интерфейс в классе, например:
класс Splash: защита __init__(сам): self.root = tk.Tk() self.root.overrideredirect(True) self.root.wm_attributes("-topmost", True) self.label = tk.Label(self.root, text="Инициализация...") self.label.pack(side=tk.BOTTOM) self.progbar = ttk.Progressbar(self.root, orient=tk.HORIZONTAL, mode='indeterminate') self.progbar.pack(fill=tk.BOTH,side=tk.BOTTOM,padx=10) self.progbar.start(40) self.root.update_idletasks() self.root.geometry( "+{}+{}".format( int((self.root.winfo_screenwidth() - self.root.winfo_reqwidth()) / 2), int((self.root.winfo_screenheight() - self.root.winfo_reqheight()) / 2), ) ) корень.mainloop() защита закрытия (сам): self.root.destroy() Цель состоит в том, чтобы во внешнем приложении я мог создать объект Splash, запустить инициализацию, а затем вызвать функцию close в Splash< /code> объект, чтобы закрыть заставку, например:
время импорта импортировать всплеск х = Всплеск.Всплеск() time.sleep(5) # Здесь происходит инициализация приложения. х.закрыть() Это не работает, поскольку root.mainloop() блокируется, и функции инициализации фактически никогда не достигаются. Этот вариант также не работает:
класс Splash: closeRequest = Ложь защита __init__(сам): # Все до root.mainloop(), как показано выше, находится здесь пока не self.closeRequest: self.root.update_idletasks() self.root.update() защита закрытия (сам): self.closeRequest = Истина Как я могу достичь своей цели? Я бы предпочел не использовать для этого потоки, но, пожалуйста, не стесняйтесь также делиться решениями на основе потоков.