pyqt5的下載進度條 實現模板
說明
QProgressBar,進度條控制元件,使用很簡單。但如何結合下載功能,實現下載進度條呢?
本文主要參考了《》這篇文章,感謝作者的分享。
其中的下載執行緒,基本原封不動的照搬了,這個下載執行緒正是技術要點所在。
下載執行緒
這個下載執行緒,其實包含了不少知識點,可以多多借鑑參考哦。
1.pyqt5的執行緒 QThread
2.requests 流下載模式
3.自定義訊號和槽函式
【如下程式碼,完全複製,直接執行,即可使用】
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import queue #如果不載入這個模板,pyinstaller打包後,可能無法執行requests模板
import requests
################################################
################################################
class Widget(QWidget):
def __init__(self, *args, **kwargs):
super(Widget, self).__init__(*args, **kwargs)
layout = QHBoxLayout(self)
# 增加進度條
self.progressBar = QProgressBar(self, minimumWidth=400)
self.progressBar.setValue(0)
layout.addWidget(self.progressBar)
# 增加下載按鈕
self.pushButton = QPushButton(self, minimumWidth=100)
self.pushButton.setText("下載")
layout.addWidget(self.pushButton)
# 繫結按鈕事件
self.pushButton.clicked.connect(self.on_pushButton_clicked)
# 下載按鈕事件
def on_pushButton_clicked(self):
the_url = ''
the_filesize = requests.get(the_url, stream=True).headers['Content-Length']
the_filepath ="D:/sogou_pinyin_93e.exe"
the_fileobj = open(the_filepath, 'wb')
#### 建立下載執行緒
self.downloadThread = downloadThread(the_url, the_filesize, the_fileobj, buffer=10240)
self.downloadThread.download_proess_signal.connect(self.set_progressbar_value)
self.downloadThread.start()
# 設定進度條
def set_progressbar_value(self, value):
self.progressBar.setValue(value)
if value == 100:
QMessageBox.information(self, "提示", "下載成功!")
return
##################################################################
#下載執行緒
##################################################################
class downloadThread(QThread):
download_proess_signal = pyqtSignal(int) #建立訊號
def __init__(self, url, filesize, fileobj, buffer):
super(downloadThread, self).__init__()
self.url = url
self.filesize = filesize
self.fileobj = fileobj
self.buffer = buffer
def run(self):
try:
rsp = requests.get(self.url, stream=True) #流下載模式
offset = 0
for chunk in rsp.iter_content(chunk_size=self.buffer):
if not chunk: break
self.fileobj.seek(offset) #設定指標位置
self.fileobj.write(chunk) #寫入檔案
offset = offset + len(chunk)
proess = offset / int(self.filesize) * 100
self.download_proess_signal.emit(int(proess)) #傳送訊號
#######################################################################
self.fileobj.close() #關閉檔案
self.exit(0) #關閉執行緒
except Exception as e:
print(e)
####################################
#程式入口
####################################
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
本文如有幫助,敬請留言鼓勵。
本文如有錯誤,敬請留言改進。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2822437/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OSS實現檔案下載進度條顯示
- 實現一個協程帶進度條下載器
- vue中頁面載入進度條效果的實現Vue
- Excel實現完成進度的進度條結果Excel
- 如何實現圖片預載入和載入進度條
- HttpWebChilent上傳與下載進度條HTTPWeb
- Python展示檔案下載進度條Python
- golang 進度條功能實現Golang
- guzzlehttp/guzzle 配合 symfony/console 命令列中實現檔案下載進度條HTTP命令列
- 【CLI】使用 Curl 下載檔案實時進度條顯示
- 使用Retrofit+RxJava實現帶進度下載RxJava
- uni-app中安卓包檢查更新、新版本下載、下載進度條顯示功能實現APP安卓
- Qml 實現水波進度動畫條動畫
- 實現環形進度條效果【一】
- 【UWP】實現一個波浪進度條
- JS進度條順滑版實現JS
- JavaScript 原生實現進度條元件.mdJavaScript元件
- iOS實現音訊進度條效果iOS音訊
- React 實現 instagram 風格進度條React
- 簡單實現帶節點的進度條
- CSS3實現原型進度條效果CSSS3原型
- 【新特性速遞】進度條,進度條,進度條
- vue/js實現檔案流下載,檔案下載進度監聽VueJS
- 簡單實現一下Flutter的Stepper做一個側邊進度條Flutter
- flutter使用dio實現 檔案下載並實現進度監聽總結Flutter
- WPF中實現彈出進度條視窗
- 【PyQt5】PyQt5 多執行緒 QThread 實現(轉載)QT執行緒thread
- [PyQt5] PyQt5 多執行緒 QThread 實現(轉載)QT執行緒thread
- 潤乾報表中進度條的一種實現方式
- 前端實現生成條形碼並下載前端
- 製作遊戲載入進度條遊戲
- 下載速度居然可以這麼快,進度條就靠你拯救了!
- 直播系統開發,實現在進度條中顯示文字顯示進度
- CSS 如何模擬“真實的”進度條?CSS
- vue 高德地圖實現進度條軌跡回放Vue地圖
- Qt實現炫酷啟動圖-動態進度條QT
- 手把手教你實現一個 Vue 進度條元件!Vue元件
- jQuery實進度條效果詳解jQuery