我为我的 python 脚本创建了一个 tkinter GUI。当我运行脚本时,我想要在 GUI 窗口上的标签小部件之一中使用动态字符串,它将显示:
“在职的。” 然后:“工作......”然后“工作......”
然后从“工作”开始。再次直到脚本完成。
(其实我更喜欢这方面的进度条)
可能吗?
我为我的 python 脚本创建了一个 tkinter GUI。当我运行脚本时,我想要在 GUI 窗口上的标签小部件之一中使用动态字符串,它将显示:
“在职的。” 然后:“工作......”然后“工作......”
然后从“工作”开始。再次直到脚本完成。
(其实我更喜欢这方面的进度条)
可能吗?
我写了两个简单的脚本来帮助演示如何做你想做的事。首先是使用标签:
import tkinter as tk
root = tk.Tk()
status = tk.Label(root, text="Working")
status.grid()
def update_status():
# Get the current message
current_status = status["text"]
# If the message is "Working...", start over with "Working"
if current_status.endswith("..."): current_status = "Working"
# If not, then just add a "." on the end
else: current_status += "."
# Update the message
status["text"] = current_status
# After 1 second, update the status
root.after(1000, update_status)
# Launch the status message after 1 millisecond (when the window is loaded)
root.after(1, update_status)
root.mainloop()
下一个是使用进度条:
import tkinter as tk
# You will need the ttk module for this
from tkinter import ttk
def update_status(step):
# Step here is how much to increment the progressbar by.
# It is in relation to the progressbar's length.
# Since I made the length 100 and I am increasing by 10 each time,
# there will be 10 times it increases before it restarts
progress.step(step)
# You can call 'update_status' whenever you want in your script
# to increase the progressbar by whatever amount you want.
root.after(1000, lambda: update_status(10))
root = tk.Tk()
progress = ttk.Progressbar(root, length=100)
progress.pack()
progress.after(1, lambda: update_status(10))
root.mainloop()
但是请注意,我不能对进度条脚本做太多事情,因为进度条有点棘手,需要完全根据您的脚本进行定制。我只是写了它,也许可以对这个主题有所了解。我的答案的主要部分是标签脚本。
对的,这是可能的。有两种方法可以做到:
每当您想从代码中更新标签时,您都可以调用the_widget.configure(the_text)
. 这将更改标签的文本。
您可以创建 a 的实例tkinter.StringVar
,并将其分配给textvariable
标签的属性。每当您更改变量的值时(通过the_variable.set(the_text)
,标签将自动更新。
请注意,要使其中任何一个工作,事件循环需要能够处理事件(即:如果您的函数需要很长时间才能运行并且您从不调用update_idletasks
或重新进入事件循环,您将看不到任何内容)。