国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

PyQt5實現下載進度條效果

2020-02-22 23:43:06
字體:
來源:轉載
供稿:網友

起因是因為公司要開發一款自動登錄某網站的助手工具提供給客戶使用,要使用到selenium,所以選擇了pyqt5的方式來開發這個C/S架構的客戶端

在過程中要用到自動更新的功能,所以自己寫一個下載進度的插件給大家分享,本人編程水平有點菜,不要見怪。

界面文件UI_download.py

# -*- coding: utf-8 -*-  from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.Qt import Qt  class Ui_download(object):   def setupUi(self, Dialog):     Dialog.setWindowFlags(Qt.FramelessWindowHint)     Dialog.setObjectName("Dialog")     Dialog.resize(300, 56)     Dialog.setFixedSize(Dialog.width(), Dialog.height())     sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)     sizePolicy.setHorizontalStretch(0)     sizePolicy.setVerticalStretch(0)     sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())     Dialog.setSizePolicy(sizePolicy)     Dialog.setSizeGripEnabled(True)     self.gridLayout = QtWidgets.QGridLayout(Dialog)     self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)     self.gridLayout.setObjectName("gridLayout")     self.progressBar = QtWidgets.QProgressBar(Dialog)     self.progressBar.setProperty("value", 0)     self.progressBar.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)     self.progressBar.setObjectName("progressBar")     self.gridLayout.addWidget(self.progressBar, 1, 0, 1, 1)     self.label = QtWidgets.QLabel(Dialog)     self.label.setObjectName("label")     self.gridLayout.addWidget(self.label, 0, 0, 1, 1)      self.retranslateUi(Dialog)     QtCore.QMetaObject.connectSlotsByName(Dialog)    def retranslateUi(self, Dialog):     _translate = QtCore.QCoreApplication.translate     Dialog.setWindowTitle(_translate("Dialog", "Dialog"))     self.label.setText(_translate("Dialog", "客戶端更新下載中..."))   if __name__ == "__main__":   import sys   app = QtWidgets.QApplication(sys.argv)   Dialog = QtWidgets.QDialog()   ui = Ui_download()   ui.setupUi(Dialog)   Dialog.show()   sys.exit(app.exec_()) 

實現文件download.py

# -*- coding: utf-8 -*-  """ Module implementing Dialog. """  from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QDialog from PyQt5 import QtWidgets from Ui_download import Ui_download import os import sys import requests   class downloadThread(QThread):    download_proess_signal = pyqtSignal(int)    def __init__(self, download_url, filesize, fileobj, buffer):     super(downloadThread, self).__init__()     self.download_url = download_url     self.filesize = filesize     self.fileobj = fileobj     self.buffer = buffer    def run(self):     try:       f = requests.get(self.download_url, stream=True)       offset = 0       for chunk in f.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)   class download(QDialog, Ui_download):   """   下載類實現   """   def __init__(self, download_url, auto_close=True, parent=None):     """     Constructor          @download_url:下載地址     @auto_close:下載完成后時候是否需要自動關閉     """     super(download, self).__init__(parent)     self.setupUi(self)     self.progressBar.setValue(0)     self.downloadThread = None     self.download_url = download_url     self.filesize = None     self.fileobj = None     self.auto_close = auto_close     self.download()    def download(self):     self.filesize = requests.get(self.download_url, stream=True).headers['Content-Length']     path = os.path.join("update", os.path.basename(self.download_url))     self.fileobj = open(path, 'wb')     self.downloadThread = downloadThread(self.download_url, self.filesize, self.fileobj, buffer=10240)     self.downloadThread.download_proess_signal.connect(self.change_progressbar_value)     self.downloadThread.start()    def change_progressbar_value(self, value):     self.progressBar.setValue(value)     if self.auto_close and value == 100:       self.close()   if __name__ == '__main__':   app = QtWidgets.QApplication(sys.argv)   ui = download()   ui.show()   sys.exit(app.exec_())             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高平市| 和静县| 额济纳旗| 济宁市| 霸州市| 柯坪县| 郴州市| 株洲市| 栾城县| 阳信县| 平凉市| 方城县| 淳化县| 龙泉市| 定远县| 罗甸县| 那坡县| 岱山县| 交城县| 高雄县| 唐河县| 合山市| 伊通| 新绛县| 田林县| 德格县| 司法| 禹城市| 丹寨县| 璧山县| 乌拉特后旗| 安泽县| 沧州市| 融水| 兴仁县| 安义县| 屏山县| 永宁县| 香港 | 阳东县| 阿克苏市|