Python之tkinter 進度條 Progressbar

Progressbar 基本概念

  Progressbar 可以解釋爲進度條,主要是當做一個工作進度的指針,在這個控件中會有一個指針,由此指針可以瞭解工作進度

構造方法如下:

Progressbar(父對象, options, ...)

參數:

  • 第一個參數:父對象,表示這個進度條將建立在哪一個窗口內
  • 第二個參數:options,參數如下
參數 含義
length 進度條的長度
默認是100像素
mode 可以有兩種模式,下面作介紹
maximum 進度條的最大值
默認是100像素
name 進度條的名稱,供程序參考引用
orient 進度條的方向,可以是HORIZONTAL(默認) 或者是 VERTICAL
value 進度條的目前值
variable 記錄進度條目前的進度值

mode參數

  • determinate:一個指針會從起點移至終點,通常當我們知道所需工作時間時,可以使用此模式,這是默認模式
  • indeterminate:一個指針會在起點和終點間來回移動,通常當我們不知道工作所需時間時,可以使用此模式

Progressbar 基本應用

例子

import tkinter
import tkinter.ttk
root = tkinter.Tk()
root.geometry('150x120')

progressbarOne = tkinter.ttk.Progressbar(root)
progressbarOne.pack(pady=20)
# 進度值最大值
progressbarOne['maximum'] = 100
# 進度值初始值
progressbarOne['value'] = 20
# 橫排 長度200 起點移至終點
progressbarTwo = tkinter.ttk.Progressbar(root, orient=tkinter.HORIZONTAL, length=200, mode='determinate')
progressbarTwo.pack(pady=20)
# 進度值最大值
progressbarTwo['maximum'] = 100
# 進度值初始值
progressbarTwo['value'] = 80

root.mainloop()

運行結果:
在這裏插入圖片描述
注意:現在進度條還不能動!

Progressbar 動畫設計

  如果想要設計含動畫效果的Progressbar,可以在每次更新Progressbar 對象的value值時調用update()方法,這時窗口可以依據value值重繪,這樣就可以達到動畫效果

例子

import time
import tkinter
import tkinter.ttk

def show():
    for i in range(100):
        # 每次更新加1
        progressbarOne['value'] = i + 1
        # 更新畫面
        root.update()
        time.sleep(0.05)

root = tkinter.Tk()
root.geometry('150x120')

progressbarOne = tkinter.ttk.Progressbar(root)
progressbarOne.pack(pady=20)
# 進度值最大值
progressbarOne['maximum'] = 100
# 進度值初始值
progressbarOne['value'] = 0

button = tkinter.Button(root, text='Running', command=show)
button.pack(pady=5)

root.mainloop()

運行結果:
在這裏插入圖片描述
例子:模擬真實下載,下載總量是10000B, 每次下載500B

def show():
    # 設置進度條的目前值
    progressbarOne['value'] = 0
    # 設置進度條的最大值
    progressbarOne['maximum'] = maxbyte
    # 調用loading方法
    loading()

def loading():
    # 改變變量屬性
    global byte
    # 每次運行500B
    byte += 500
    # 設置指針
    progressbarOne['value'] = byte
    if byte < maxbyte:
        # 經過100ms後再次調用loading方法
        progressbarOne.after(100, loading)


root = tkinter.Tk()
root.geometry('150x120')

# 設置下載初值
byte = 0
# 設置下載最大值
maxbyte = 10000

progressbarOne = tkinter.ttk.Progressbar(root)
progressbarOne.pack(pady=20)

button = tkinter.Button(root, text='Running', command=show)
button.pack(pady=5)

root.mainloop()

運行結果:
在這裏插入圖片描述

Progressbar 的方法 start()/step()/stop()

含義如下:

  • start(interval):每隔interval時間移動一次指針。interval的默認值是50ms,每次移動指針調用一次step(amount)。在step()方法內的amount參數意義就是增值量
  • step(amount):每次增加一次amount,默認值是1.0,在determinate模式下,指針不會超過maximum參數。在indeterminate模式下,當指針達到maximum參數值的前一格時,指針會回到起點
  • stop():停止start()運行

例子

import time
import tkinter
import tkinter.ttk

def show():
    while progressbarOne.cget('value') <= progressbarOne['maximum']:
        progressbarOne.step(2)
        root.update()
        print(progressbarOne.cget('value'))
        time.sleep(0.05)

root = tkinter.Tk()
root.geometry('150x120')

progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL)
progressbarOne.pack(pady=20)

progressbarOne['maximum'] = 100
progressbarOne['value'] = 0

button = tkinter.Button(root, text='Running', command=show)
button.pack(pady=5)

root.mainloop()

運行結果:
在這裏插入圖片描述

使用start()方法啓動動畫,單擊stop按鈕停止

例子

import tkinter
import tkinter.ttk

def run():
    progressbarOne.start()

def stop():
    progressbarOne.stop()


root = tkinter.Tk()
root.geometry('150x120')

progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL)
progressbarOne.pack(padx=5, pady=10)

progressbarOne['maximum'] = 100
progressbarOne['value'] = 0

buttonRun = tkinter.Button(root, text='Run', width=6, command=run)
buttonRun.pack(padx=10, pady=5, side=tkinter.LEFT)

buttonStop = tkinter.Button(root, text='Stop', width=6, command=stop)
buttonStop.pack(padx=10, pady=5, side=tkinter.RIGHT)

root.mainloop()

運行結果:
在這裏插入圖片描述

indeterminate 模式

  在這個模式下指針將左右移動,主要目的是讓用戶知道程序仍然在繼續工作

例子

progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='indeterminate', orient=tkinter.HORIZONTAL)

運行結果:
在這裏插入圖片描述

謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章