【发布时间】:2020-11-22 11:54:37
【问题描述】:
希望您能帮我解决以下问题。
我正在使用库 tkinter 和
我有一个 main_screen main_screen= Tk() 与 mainloop() 循环
在 main_screen 内部,有一个小数据表单,您需要在其中键入一些必要的数据。 在窗口的末尾,我有一个按钮可以打开第二个窗口。
单击该按钮后,会出现 report_screen(请参阅下面的代码)
新窗口应该会出现命令Toplevel(),并打印一个标签,上面写着正在启动:
request_start = LabelFrame(report_screen, text="Starting...").pack()
那么我的程序必须运行一个大约需要 10 秒才能完成的进程。
假设我的流程就是这样
time.sleep(10)
最后,运行下一行:
request_done = LabelFrame(report_screen, text="Done").pack()
我的问题是什么?
问题是report_screen 直到 10 秒的过程完成后才会出现,并且同时出现两个标签“开始...”和“完成”。
我不希望这样,我要求 report_screen 出现带有“正在启动”标签,然后运行该进程,当该进程完成后,添加“完成”标签
这是我遇到此问题的代码部分
report_screen = Toplevel()
request_start = Label(report_screen, text="Starting...").pack()
time.sleep(10) #example of my process that takes around 10 seconds
request_done = Label(report_screen, text="Done").pack()
【问题讨论】:
-
time.sleep(10)就像它所说的那样:它使整个应用程序进入睡眠状态。这个网站上有无数关于在 tkinter 应用程序中调用time.sleep(...)的问题。 -
@BryanOakley,我知道但我的过程不是
time.sleep,我只是举个例子,我的实际过程大约需要10秒 -
像大多数 GUI 机制一样,它运行一个事件循环(又名 mainloop),如果不允许循环,屏幕更新将不会发生。在第一次更新之后和你的任务之前尝试
report_screen.update_idletasks()。 -
@KarlKnechtel 做得很好,似乎
update()方法可以很好地更新屏幕中的任何内容。