Tkinter 進度條

Salman Mehmood 2023年1月30日 2022年5月17日
  1. Tkinter 中的進度條元件
  2. 在 Tkinter 中使用確定進度條
  3. 在 Tkinter 中使用不確定的進度條
  4. 在 Tkinter 進度條中使用文字
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() 類來使用這個元件。

這個類接受多個引數。

  1. parent:GUI 視窗的根。
  2. orient:此引數指定方向。我們可以設定兩個值,HORIZONTALVERTICAL
  3. length:可以使用此屬性調整長度。
  4. mode:該屬性接受兩種模式,determinateindeterminate

在這種情況下,我們用一個按鈕來控制進度條。每當按下按鈕時都會呼叫 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() 元件獲取價值。

程式碼遵循這些步驟。

  1. 不幸的是,沒有文字功能來顯示進度條的進度,所以我們建立了一個 stringvar 變數,它接受字串值並將其設定在標籤中。Label() 元件將顯示進度條的值。

  2. StartProgress() 函式會增加進度條的狀態。在這個函式中,迴圈被包裹,它將迭代 5 次。
    在每次迭代中,進度條的狀態都會增加 20%。set() 方法在字串中設定當前狀態,get() 幫助獲取 stringvar 的值。

  3. update_idletasks() 方法將更新狀態。每次迭代都有 1 秒的延遲。

  4. 呼叫 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()

輸出:

Tkinter 進度條中的文字

點選這裡閱讀官方 Python 文件。這裡的另一個資源

Salman Mehmood avatar Salman Mehmood avatar

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