使用Label.configure()动态更改Tkinter标签文本

时间:2017-08-12 06:45:59

标签: python user-interface tkinter python-3.6

我是GUI开发新手并尝试使用Python3.6 + Tkinter构建应用程序。

我有一个要求,当用户点击Button时,我需要用新文本更改默认文本(由Label创建时显示)。要实现这一点,我正在使用label.configure(text="<new_text>")

为了简化我的要求,请考虑以下标签最初显示的示例&#34;欢迎&#34;。当用户单击Button时,Label文本应更改为&#34; Process Started&#34;并且在完成该过程后,Label文本应更改为&#34; Process Completed&#34;。这里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()

预期: 我的期望是,当用户点击Button时,Label将显示&#34; Process Started&#34;持续5秒,最后在流程完成执行后,标签将更新为&#34;流程完成&#34;。

问题: 我看到的是,当我按下按钮时,标签文字从&#34;欢迎&#34;至(5秒后)&#34;处理完成&#34;。我无法理解为什么我的标签没有显示&#34; Process Started&#34;按下按钮后立即。

如上所述,我是GUI开发的新手,我第一次学习Python和Tkinter。所以我本可以在程序中犯一些错误。如果我在程序流程/逻辑本身中犯了任何基本错误,请原谅我的无知。我很想听听你的想法,谢谢!

编辑:正如@Rawing所指出的,存在类似的问题 - Why does time.sleep pause tkinter window before it opens 然而,基本的区别是我希望在do_something函数完成执行之前不返回mainloop。

0 个答案:

没有答案