Tkinter 进度条
在这个演示中,我们将学习如何在 Tkinter 中以多种方式创建进度条。
Tkinter 中的进度条组件
进度条组件分析用户正在进行的用户任务。我们在几个地方查看这个组件,例如在安装或其他 GUI 应用程序过程中。
这个组件可以开发成两种模式,确定模式和不确定模式。当进程在确定模式下完成时,该组件可让你分析进度。
此模式按递增顺序显示进度。
在不确定模式下,我们可以看到动画使用这个组件来假设正在发生的事情。在这种模式下,光标在组件的边缘之间来回跳跃。
在 Tkinter 中使用确定进度条
from tkinter import *
from tkinter import ttk
gui = Tk()
gui.title("Delftstack")
gui.geometry("600x400")
def progress():
# increment of progress value
progress_var["value"] += 20
# create an object of progress bar
progress_var = ttk.Progressbar(gui, orient=HORIZONTAL, length=400, mode="determinate")
progress_var.pack(pady=30)
btn = Button(gui, text="progress", command=progress)
btn.pack(pady=30)
gui.mainloop()
进度条是 ttk
类的一个组件。我们可以使用 Progressbar()
类来使用这个组件。
这个类接受多个参数。
parent
:GUI 窗口的根。orient
:此参数指定方向。我们可以设置两个值,HORIZONTAL
和VERTICAL
。length
:可以使用此属性调整长度。mode
:该属性接受两种模式,determinate
和indeterminate
。
在这种情况下,我们用一个按钮来控制进度条。每当按下按钮时都会调用 progress()
函数,该值将增加 20%。
Progressbar
类有不同的方法。该代码使用了 start()
和 stop()
方法。
start()
方法包含值,stop()
方法包含零个参数。
from tkinter import *
from tkinter import ttk
gui = Tk()
gui.title("Delftstack")
gui.geometry("600x400")
def StartProgress():
# start progress
progress_var.start(10)
def StopProgress():
# stop progress
progress_var.stop()
# create an object of progress bar
progress_var = ttk.Progressbar(gui, orient=HORIZONTAL, length=400, mode="determinate")
progress_var.pack(pady=30)
btn = Button(gui, text="progress", command=StartProgress)
btn.pack(pady=30)
btn2 = Button(gui, text="stop", command=StopProgress)
btn2.pack(pady=30)
gui.mainloop()
输出:
在 Tkinter 中使用不确定的进度条
from tkinter import *
from tkinter import ttk
gui = Tk()
gui.title("Delftstack")
gui.geometry("600x400")
def StartProgress():
# start progress
progress_var.start(10)
def StopProgress():
# stop progress
progress_var.stop()
# create an object of progress bar
progress_var = ttk.Progressbar(gui, orient=HORIZONTAL, length=400, mode="indeterminate")
progress_var.pack(pady=30)
btn = Button(gui, text="progress", command=StartProgress)
btn.pack(pady=30)
btn2 = Button(gui, text="stop", command=StopProgress)
btn2.pack(pady=30)
gui.mainloop()
此示例与前面的示例类似,但其类型不同。这个进度条 indeterminate
模式以动画模式显示状态,让你知道那里正在发生一些事情,但你无法确定进度到哪里。
在 Tkinter 进度条中使用文本
此代码演示了如何使用 Label()
组件获取价值。
代码遵循这些步骤。
-
不幸的是,没有文本功能来显示进度条的进度,所以我们创建了一个
stringvar
变量,它接受字符串值并将其设置在标签中。Label()
组件将显示进度条的值。 -
StartProgress()
函数会增加进度条的状态。在这个函数中,循环被包裹,它将迭代 5 次。
在每次迭代中,进度条的状态都会增加 20%。set()
方法在字符串中设置当前状态,get()
帮助获取stringvar
的值。 -
update_idletasks()
方法将更新状态。每次迭代都有 1 秒的延迟。 -
调用
StopProgress()
方法时,状态将重置为零。
from tkinter import *
from tkinter import ttk
import time
gui = Tk()
gui.title("Delftstack")
gui.geometry("600x400")
def StartProgress():
for i in range(5):
progress_var["value"] += 20
stringvar.set(progress_var["value"])
# get the value
label.config(text=stringvar.get() + " %")
# update value
gui.update_idletasks()
time.sleep(1)
def StopProgress():
# stop progress
progress_var.stop()
# set zero percent
stringvar.set("00.0 %")
label.config(text=stringvar.get())
# create an instance of progress bar
progress_var = ttk.Progressbar(gui, orient=HORIZONTAL, length=400, mode="determinate")
progress_var.place(x=30, y=20)
start_btn = Button(gui, text="Next", command=StartProgress)
start_btn.place(x=30, y=50)
# string variable
stringvar = StringVar()
stringvar.set("00.0 %")
cancel_btn = Button(gui, text="Cancel", command=StopProgress)
cancel_btn.place(x=400, y=50)
label = Label(gui, text=stringvar.get(), font=("", 12))
label.place(x=430, y=25)
gui.mainloop()
输出:
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn