假设我有一个在TKinter中按下按钮时运行的方法。这个方法打开了一个外部应用程序(即Excel,Powerpoint等。我的程序打开的应用程序需要更长时间才能打开,这就是我需要加载对话框的原因)
我正在尝试打开一个小的自定义tk.toplevel
加载对话框,该对话框将在外部应用程序加载时显示和takefocus
。
但是,每当TKinter运行打开应用程序的方法时,整个事情就会冻结,我的加载对话框只有在应用程序最终打开后才能看到。
有没有办法显示我的加载对话框,同时在后台打开应用程序?
答案 0 :(得分:1)
不是在同一时间。而是首先打开对话框,然后调用打开其他应用程序的方法。您必须在冻结GUI的方法之前调用update_idletasks
来强制执行对话框的绘制,否则在程序空闲之前不会绘制对话框,这将为时已晚。
在此示例中,我使用time.sleep
来模拟使应用程序忙碌且GUI冻结的任务。
import time
import tkinter as tk
class App():
def __init__(self):
self._root = tk.Tk()
b = tk.Button(self._root, text='Click me', command=self.onclick)
b.pack()
def run(self):
self._root.mainloop()
def onclick(self):
dialog = tk.Toplevel(self._root)
tk.Label(dialog, text='Loading...').pack()
dialog.update_idletasks()
self.this_takes_a_long_time()
dialog.destroy()
def this_takes_a_long_time(self):
time.sleep(5)
App().run()