我是GUI开发新手,尝试使用Python3.6 + Tkinter构建应用程序。使用Label.configure()动态改变Tkinter标签文本
我有一个需求,当用户点击一个按钮时,需要用新文本更改默认文本(在创建时由标签显示)。为了实现我使用label.configure(text="")
为了给您一个我的要求的简化版本,请考虑以下示例,其中标签最初显示“欢迎”。当用户单击按钮时,标签文本应更改为“流程开始”,并且在该过程完成后,标签文本应更改为“处理完成”。这里do_something函数运行一个需要一些时间的进程,我使用time.sleep(5)来模拟运行5秒的进程。
from tkinter import *
from tkinter import ttk
import time
def do_something():
label.configure(text="Process Started")
time.sleep(5) #some process/script that takes few seconds to execute
label.configure(text="Process Completed")
root = Tk()
label = ttk.Label(root, text="Welcome")
label.pack()
button = ttk.Button(root, text="Click to Start Process", command=do_something)
button.pack()
root.mainloop()
预期: 我意料的是,当用户点击该按钮时,标签会显示“进程启动的” 5秒和流程执行完毕后终于,标签将被更新为“过程完成”。
问题: 我看到的是,当我按下按钮时,标签文本从“欢迎”更改为(5秒后)“处理完成”。我无法理解为什么我的标签在按下按钮后没有显示“Process Started”。
如上所述,我是GUI开发新手,我第一次学习Python和Tkinter。所以我可能在程序本身上犯了一些错误。因此,如果我在程序流程/逻辑本身中犯了任何基本错误,请原谅我的无知。我很想听听你的想法,谢谢!
编辑:正如@Rawing指出,存在类似的问题 - Why does time.sleep pause tkinter window before it opens 的基本区别,然而,就是我想不会返回主循环do_something函数完成执行之前。
+0
可能的重复[为什么time.sleep暂停tkinter窗口打开之前](https://stackoverflow.com/questions/30284270/why-does-time-sleep-pause-tkinter-window-before-it-打开) –
+0
@Rawing感谢您指出一个类似的问题。但我的问题的区别是,我不希望返回到主循环,直到函数'do_comething'完全执行完毕 –