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)
運行結果:
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Python GUI之如何使用tkinter控件
- python+Tkinter+多線程的實例
- Python tkinter 列表框Listbox屬性詳情
- python tkinter Entry控件的焦點移動操作
- python GUI多行輸入文本Text的實現