Tkinter使用Progressbar創(chuàng)建和管理進(jìn)度條的操作代碼
前言
Progressbar是Tkinter庫(kù)中的一個(gè)小部件,用于創(chuàng)建和管理進(jìn)度條。它可以在圖形用戶界面中顯示任務(wù)的進(jìn)度,并提供了多種樣式和配置選項(xiàng)。
使用Progressbar,你可以按照固定或不確定的進(jìn)度展示任務(wù)的進(jìn)行狀態(tài)。它可以顯示任務(wù)完成的百分比,或者在不確定的情況下,顯示一個(gè)動(dòng)畫(huà)效果表示任務(wù)正在進(jìn)行。
以下是一些Progressbar的重要屬性和方法:
- length:指定進(jìn)度條的長(zhǎng)度。
- mode:指定進(jìn)度條的模式,可以是"determinate"(確定模式)或"indeterminate"(不確定模式)。
- maximum:設(shè)置進(jìn)度條的最大值,默認(rèn)為100。
- value:設(shè)置進(jìn)度條的當(dāng)前值。
- start():?jiǎn)?dòng)進(jìn)度條的動(dòng)畫(huà)效果,僅在不確定模式下有效。
- stop():停止進(jìn)度條的動(dòng)畫(huà)效果,僅在不確定模式下有效。
通過(guò)使用這些屬性和方法,你可以創(chuàng)建一個(gè)自定義的進(jìn)度條并根據(jù)需要進(jìn)行更新和控制。
一、indeterminate 模式
在這個(gè)模式下指針左右移動(dòng),主要目的是要讓用戶知道程序還在運(yùn)行
import tkinter as tk from tkinter.ttk import Progressbar class Simulate_Waiting_State: def __init__(self): self.root = tk.Tk() self.root.title('進(jìn)度條下載演示') self.root.geometry("300x150+1100+150") self.interface() def interface(self): # 創(chuàng)建進(jìn)度條 self.progress_bar = Progressbar(self.root, length=200, mode="indeterminate") # 創(chuàng)建按鈕 self.start_button = tk.Button(self.root, text="開(kāi)始", command=self.start_progress) self.stop_button = tk.Button(self.root, text="停止", command=self.stop_progress) # 將進(jìn)度條和按鈕放置在窗口中 self.progress_bar.grid(row=0, column=1, pady=20, padx=50, columnspan=100) self.start_button.grid(row=1, column=1, padx=75) self.stop_button.grid(row=1, column=3) def start_progress(self): self.progress_bar.start() def stop_progress(self): self.progress_bar.stop() if __name__ == '__main__': run = Simulate_Waiting_State() run.root.mainloop() import tkinter as tk from tkinter.ttk import Progressbar class Simulate_Waiting_State: def __init__(self): self.root = tk.Tk() self.root.title('進(jìn)度條下載演示') self.root.geometry("300x150+1100+150") self.interface() def interface(self): # 創(chuàng)建進(jìn)度條 self.progress_bar = Progressbar(self.root, length=200, mode="indeterminate") # 創(chuàng)建按鈕 self.start_button = tk.Button(self.root, text="開(kāi)始", command=self.start_progress) self.stop_button = tk.Button(self.root, text="停止", command=self.stop_progress) # 將進(jìn)度條和按鈕放置在窗口中 self.progress_bar.grid(row=0, column=1, pady=20, padx=50, columnspan=100) self.start_button.grid(row=1, column=1, padx=75) self.stop_button.grid(row=1, column=3) def start_progress(self): self.progress_bar.start() def stop_progress(self): self.progress_bar.stop() if __name__ == '__main__': run = Simulate_Waiting_State() run.root.mainloop()
二、determinate模式
1、模擬下載進(jìn)度
import tkinter as tk from tkinter.ttk import Progressbar import threading import time class Download_Files: def __init__(self): self.root = tk.Tk() self.root.title('進(jìn)度條下載演示') self.root.geometry("300x150+1100+150") self.interface() def interface(self): # 創(chuàng)建進(jìn)度條 self.progress_bar = Progressbar(self.root, length=200, mode="determinate") # 創(chuàng)建按鈕 self.start_button = tk.Button(self.root, text="開(kāi)始下載", command=self.download) # 將進(jìn)度條和按鈕放置在窗口中 self.progress_bar.grid(row=0, pady=20, padx=50) self.start_button.grid(row=1, padx=50) # 進(jìn)度值最大值 self.progress_bar['maximum'] = 100 def download(self): """進(jìn)度條模擬顯示下載進(jìn)度""" # 進(jìn)度值初始值 initial_value = 0 while initial_value < 100: initial_value += 1 # 更新進(jìn)度條的值 self.progress_bar['value'] = initial_value self.root.update() # 模擬等待時(shí)間時(shí)間 time.sleep(0.1) def thread_management(self): """啟用子線程下載文件""" T1 = threading.Thread(target=self.download, daemon=True) T1.start() if __name__ == '__main__': run = Download_Files() run.root.mainloop()
2、真實(shí)下載進(jìn)度
import tkinter as tk from tkinter.ttk import Progressbar from tkinter import messagebox import threading import requests class Download_Files: def __init__(self): self.root = tk.Tk() self.root.title('進(jìn)度條下載演示') self.root.geometry("300x150+850+350") self.interface() def interface(self): # 創(chuàng)建進(jìn)度條 self.progress_bar = Progressbar(self.root, length=200, mode="determinate") # 創(chuàng)建按鈕 self.start_button = tk.Button(self.root, text="開(kāi)始下載", command=self.thread_group) # 將進(jìn)度條和按鈕放置在窗口中 self.progress_bar.grid(row=0, pady=20, padx=50) self.start_button.grid(row=1, padx=50) def download(self): # 禁用按鈕 self.start_button.config(state=tk.DISABLED) # 下載地址 url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2' file_data = requests.get(url, stream=True) # 獲取文件大小,單位字節(jié)(B) if "content-length" in file_data.headers: maxbyte = int(file_data.headers["content-length"]) # 截取文件名稱 filename = url.split("/")[-1] with open(filename, "wb") as f: downloaded_bytes = 0 for chunk in file_data.iter_content(chunk_size=1024): if chunk: f.write(chunk) downloaded_bytes += len(chunk) # 更新進(jìn)度條的值 # 將已下載的字節(jié)數(shù)除以文件總大小(maxbyte),然后乘以100,得到已下載的數(shù)據(jù)量相對(duì)于文件總大小的百分比 self.progress_bar['value'] = downloaded_bytes / maxbyte * 100 self.root.update() # 彈窗提示下載完成 messagebox.showinfo("下載提示", "文件下載完成!") # 恢復(fù)按鈕的可點(diǎn)擊狀態(tài) self.start_button.config(state=tk.NORMAL) # 下載完成后重置進(jìn)度條的值 self.progress_bar['value'] = 0 def thread_group(self): """啟用子線程下載""" T1 = threading.Thread(name='download', target=self.download, daemon=True) T1.start() if __name__ == '__main__': run = Download_Files() run.root.mainloop()
到此這篇關(guān)于Tkinter使用Progressbar創(chuàng)建和管理進(jìn)度條的文章就介紹到這了,更多相關(guān)Tkinter Progressbar進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
跟老齊學(xué)Python之賦值,簡(jiǎn)單也不簡(jiǎn)單
在《初識(shí)永遠(yuǎn)強(qiáng)大的函數(shù)》一文中,有一節(jié)專門討論“取名字的學(xué)問(wèn)”,就是有關(guān)變量名稱的問(wèn)題,本溫故而知新的原則,這里要復(fù)習(xí)一下2014-09-09Python中順序表的實(shí)現(xiàn)簡(jiǎn)單代碼分享
這篇文章主要介紹了Python中順序表的實(shí)現(xiàn)簡(jiǎn)單代碼分享,展示了代碼運(yùn)行結(jié)果,然后分享了相關(guān)實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python數(shù)據(jù)分析之Python和Selenium爬取BOSS直聘崗位
今天教各位小伙伴怎么用Python和Selenium爬取BOSS直聘崗位,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲(chóng)和數(shù)據(jù)分析的小伙伴有很好地幫助,需要的朋友可以參考下2021-05-05完美解決Django2.0中models下的ForeignKey()問(wèn)題
這篇文章主要介紹了完美解決Django2.0中models下的ForeignKey()問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05利用python開(kāi)發(fā)app實(shí)戰(zhàn)的方法
這篇文章主要介紹了利用python開(kāi)發(fā)app實(shí)戰(zhàn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07一篇文章從零開(kāi)始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項(xiàng)目環(huán)境
在Conda中創(chuàng)建新環(huán)境是一個(gè)非常有用的做法,尤其是當(dāng)你需要為不同的項(xiàng)目安裝不同版本的軟件包時(shí),這篇文章主要給大家介紹了關(guān)于從零開(kāi)始創(chuàng)建conda環(huán)境、常用命令的使用及pycharm配置項(xiàng)目環(huán)境的相關(guān)資料,需要的朋友可以參考下2024-07-07Python報(bào)錯(cuò):TypeError:?‘xxx‘?object?is?not?subscriptable解決
這篇文章主要給大家介紹了關(guān)于Python報(bào)錯(cuò):TypeError:?‘xxx‘?object?is?not?subscriptable的解決辦法,TypeError是Python中的一種錯(cuò)誤,表示操作或函數(shù)應(yīng)用于不合適類型的對(duì)象時(shí)發(fā)生,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08python驗(yàn)證碼識(shí)別教程之利用滴水算法分割圖片
這篇文章主要給大家介紹了關(guān)于python驗(yàn)證碼識(shí)別教程之利用滴水算法分割圖片的相關(guān)資料,文章中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06python 判斷參數(shù)為Nonetype類型或空的實(shí)例
今天小編就為大家分享一篇python 判斷參數(shù)為Nonetype類型或空的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10