當前位置:首頁 ? tkinter ? 正文

Tkinter.ttk的進度條組件Progressbar,可以改變進度條顏色

Progressbar組件,俗稱進度條,這是一個ttk組件,需要導入ttk模塊才能使用。

創建語法: Progressba (父組件,參數……. )

 

參數:

參數

說明

length

進度條長度,默認為100像素

mode

模式,有2種可選擇:determinate, indeterminate

maximum

進度條最大值,默認為100

orient

進度條方向,水平:HORIZONTAL,垂直:VERTICAL

value

進度條目前的值

variable

綁定進度條目前的值的變量

 

代碼中的 start()是進度條的方法,執行它,進度條動畫就自動執行。文章有專門講解這個方法。

(垂直進度條道理完全一樣,就不講解了)

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
root.geometry('350x100+888+444')
 
pbar1=Progressbar(root,orient=HORIZONTAL,length=200,mode='determinate') 
# 水平進度條,模式:determinate 從起始點到終點
 
pbar2=Progressbar(root,orient=HORIZONTAL,length=200,mode='indeterminate')
# 水平進度條,模式:indeterminate 來回模式
 
pbar1.pack(pady=10)
pbar2.pack(pady=10)
 
pbar1.start() # 進度條1每隔50ms移動一下指針
pbar2.start() # 進度條2每隔50ms移動一下指針
 
root.mainloop()

運行結果:

以上代碼讓大家對2個模式的外觀有個感性認識,在實際運用時,一般來說,如果可以確定進度條的終點,就用默認的determinate模式,否則就用indeterminate模式。

 

我們先來講一下默認的determinate模式,上面的start()方法,到達終點時,進度條并沒有停止下來,下面我們來講一下如何做到進度條的動畫效果,但到終點要停下來。

第1種方法,用for循環的方法,這里要用到time模塊,利用這個time模塊中的暫停功能,讓進度條進度稍停一下,讓我們的眼睛可以看到進度條的變化過程,否則,循環很快,你都看不到過程就只看到進度條已經到過終點。

from tkinter import *
from tkinter.ttk import *
import time
 
def running(): # 利用循環讓進度條動起來
    for i in range(100): # 進度條默認的終值是100
        pbar1['value']=i+1 # 進度條的值增1
        pbar1.update() # 刷新進度條,讓我們看到動畫
        time.sleep(0.1) # 暫停0.1秒
 
root=Tk()
root.geometry('350x100+888+444')
 
pbar1=Progressbar(root,orient=HORIZONTAL,length=200,mode='determinate') 
# 水平進度條,模式:determinate 從起始點到終點
 
pbar1.pack(pady=30)
 
running()
 
root.mainloop()

運行結果

202111160924082563008.png

 

第2種方法,用after()每隔一定時間,運行函數,代替循環。

from tkinter import *
from tkinter.ttk import *
 
js=0 # 初值
def running():
    global js
    js=js+1
    pbar1['value']=js # 新增1的js賦值給進度條當前值
    if pbar1['value'] < pbar1['maximum']: # 進度條默認的終值'maximum'是100
        pbar1.after(100,running) # 利用after方法,每100微秒再運行函數一次
 
root=Tk()
root.geometry('350x100+888+444')
 
pbar1=Progressbar(root,orient=HORIZONTAL,length=200,mode='determinate') 
# 水平進度條,模式:determinate 從起始點到終點
 
pbar1.pack(pady=30)
 
running()
 
root.mainloop()

運行結果同上。

 

第3種方法,用timer.sleep(0.05) 代替 after()方法,第暫停一下,再執行函數,直到進度條當前值等于最大值。

from tkinter import *
from tkinter.ttk import *
import time
 
js=0
def running():
    global js
    js+=1
    pbar1['value']=js # 當前值等于新增1的js
    root.update()
    time.sleep(0.05) # 暫停一下
    if pbar1['value'] < pbar1['maximum']: # 進度條當前值小于最大值
        running() # 繼續執行本函數
 
root=Tk()
root.geometry('350x100+888+444')
 
pbar1=Progressbar(root,orient=HORIZONTAL,length=200,mode='determinate') 
# 水平進度條,模式:determinate 從起始點到終點
 
pbar1.pack(pady=30)
 
running()
 
root.mainloop()

運行結果同上。

 

凡是知道進度條終值,就可以用以上方法,上面的終值是用默認的100,你可以改變終值,如你想改終值為300,代碼為:

pbar1['maximum']=300


進度條的3個方法:

start(interval):每隔interval時間移動一下指針。interval的默認值為50ms,start() 就相當于start(50),如果想加快速度,就把參數的時間寫小一點,如:start(10),就加快了進度條的速度。

step(amount):每次增加一次amount步長,默認值是1.0,無論如何增加進度條的value值,都不能超過進度條的最大值maximum。

stop():進度條停止start()運行

  

以下用代碼來演示這3個方法的使用:

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
pbar1=Progressbar(root,orient=HORIZONTAL,length=300,mode='determinate') 
# 水平進度條,模式:determinate 從起始點到終點
pbar1.grid(row=0,column=0,columnspan=3,padx=20,pady=10) # 創建進度條1
 
but1=Button(root,text='開始',command=lambda:pbar1.start(30))
 # 默認參數為50ms,這里為30,值越小,速度越快
but1.grid(row=1,column=0)
 
but2=Button(root,text='停止',command=lambda:pbar1.stop()) # 進度條停止
but2.grid(row=1,column=1)
 
but3=Button(root,text='手動',command=lambda:pbar1.step(10))
# 鼠標點擊一下,當前值增加10(默認增加1)
but3.grid(row=1,column=2)
 
#------------------
 
pbar2=Progressbar(root,orient=HORIZONTAL,length=300,mode='indeterminate')
# 水平進度條,模式:indeterminate 來回模式
pbar2.grid(row=2,column=0,columnspan=3,padx=20,pady=(20,10)) 
 
but4=Button(root,text='開始',command=lambda:pbar2.start(30))
 # 默認參數為50ms,這里為30,值越小,速度越快
but4.grid(row=3,column=0,pady=(0,10))
 
but5=Button(root,text='停止',command=lambda:pbar2.stop()) # 進度條停止
but5.grid(row=3,column=1,pady=(0,10))
 
but6=Button(root,text='手動',command=lambda:pbar2.step(10))
# 鼠標點擊一下,當前值增加10(默認增加1)
but6.grid(row=3,column=2,pady=(0,10))
 
root.mainloop()

運行結果

202111160924088068687.png

 

現在我來講一下,如何設置進度條的初始值以及如何獲取進度條的當前值。

 

設置進度條的value值:pbar1[‘value’]=初始值

如果在創建進度條時,綁定了一個變量:variable=var 可以用變量的set()來設初值,如:var.set(75)

 

獲取進度值方法:

1.  進度條[‘value’] 返回值

2.  進度條.cget('value')

3.  變量.get()

 

下面有代碼為演示:

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
var=IntVar() # 創建一個變量
pbar1=Progressbar(root,length=200,mode='determinate',variable=var) # 綁定變量
# 水平進度條,模式:determinate 從起始點到終點
pbar1.pack(padx=10,pady=5)
 
var.set(75) # 變量set()方法設進度初值為75
# pbar1['value']=75 # 沒有綁定變量,這個方法也可以設初始值
 
def goto1():
    pbar1.step(10) # 前進10步
    print(pbar1['value']) # 輸出目前的進度值
    # print(pbar1.cget('value')) # cget()方法也可以得到進度值
    # print(var.get()) # 用變量的get()方法也可以得到進度值
 
but1=Button(root,text="前進10步",command=goto1)
but1.pack(pady=10)
 
root.mainloop()

 

有了上述講解的進度條知識基本上夠用了,但有的朋友可能還是想改一下進度的顏色或寬度(以前代碼里的length參數是進度條的長度),這在外觀上的改變要通過Style樣式來設置。

我測試發現,進度條的顏色和寬度跟ttk主題有關,有些主題支持顏色自定義,有些不支持。

 

下面是相關代碼:

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
A = Style()
A.theme_use('clam')
# win10環境下主題:('winnative','clam','alt','default','classic','vista','xpnative')
# 進度條顏色改變測試成功的是:'winnative','clam','alt','default','classic'
 
A.configure("my0.Horizontal.TProgressbar", troughcolor ='white', background='lightblue') # troughcolor 水槽色
A.configure("my1.Horizontal.TProgressbar", troughcolor ='white', background='green') # background 背景色
A.configure("my2.Horizontal.TProgressbar", troughcolor ='white', background='yellow')
A.configure("my3.Horizontal.TProgressbar", troughcolor ='white', background='red')
 
B0 = Progressbar(root,style="my0.Horizontal.TProgressbar",length=200)
B0.pack(padx=10,pady=5)
 
B1 = Progressbar(root,style="my1.Horizontal.TProgressbar",length=200)
B1.pack(padx=10,pady=5)
 
B2 = Progressbar(root,style="my2.Horizontal.TProgressbar",length=200)
B2.pack(padx=10,pady=5)
 
B3 = Progressbar(root,style="my3.Horizontal.TProgressbar",length=200)
B3.pack(padx=10,pady=5)
 
B0.start()
B1.start()
B2.start()
B3.start()
 
root.mainloop()

主題為classic的運行結果

 主題為clam的運行結果

 

我在win10電腦上測試,只有vista 和 xpnative 這2款主題不支持ttk進度條自定義顏色,其它都支持。

 

在進度條寬度的樣式設置也是一樣的情況,有些主題不支持,有些支持。

下面的代碼,我在win10電腦環境測試。

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
A = Style()
A.theme_use('xpnative')
# win10環境下主題:('winnative','clam','alt','default','classic','vista','xpnative')
# 進度條漕的寬度改變測試成功的是:'winnative','alt','default','classic'
 
A.configure("my0.Horizontal.TProgressbar", troughcolor ='white', background='red',thickness=50) # troughcolor 水槽色
A.configure("my1.Horizontal.TProgressbar", troughcolor ='white', background='green',thickness=50) # background 背景色
 
B0 = Progressbar(root,style="my0.Horizontal.TProgressbar",length=200)
B0.pack(padx=10,pady=5)
 
B1 = Progressbar(root,style="my1.Horizontal.TProgressbar",length=200)
B1.pack(padx=10,pady=5)
 
B0.start()
B1.start()
 
root.mainloop()

測試結果,進度條漕的寬度改變測試成功的是這幾款主題:'winnative','alt','default','classic'

 

運行結果

202111160924085175773.png

  此文章來自:wb98.com  網站還有相關的系列課程文章,感興趣的可以前往。

  好了,進度條就講解到這里,下一篇文章我來講講另一個ttk組件:Treeview組件。

 

 

 


來源:濟亨網

本文鏈接:http://www.chinaengraver.com/post/340.html

    << 上一篇 下一篇 >>

    湘公網安備 43011102000514號 - 湘ICP備08100508號

    2019年秋霞鲁丝片瓜皮_导航亚洲AV日韩AV永久无码_有没有哪些可以看片的免费的_国产色妞妞在线视频免费播放