Maison > Article > développement back-end > PyQt5 implémente l'effet de barre de progression du téléchargement
Cet article présente principalement en détail l'effet de barre de progression de téléchargement de PyQt5, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
La raison est que l'entreprise souhaite développer un outil d'assistance de connexion automatique. d'un certain site Web est fourni aux clients et nécessite l'utilisation de sélénium, j'ai donc choisi la méthode pyqt5 pour développer ce client d'architecture C/S
Dans le processus, je dois utiliser la fonction de mise à jour automatique, donc je Écrivez un plug-in de progression de téléchargement à partager avec tout le monde. Mes compétences en programmation sont un peu différentes, alors ne soyez pas offensé.
Fichier d'interface 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_())
Fichier d'implémentation 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_())
Un module de téléchargement relativement courant lors de l'initialisation de l'appel, il vous suffit de transmettre l'adresse à télécharger. L'opération de téléchargement est asynchrone pour éviter. bloquant l'interface utilisateur, assurez-vous qu'il y a un répertoire de mise à jour dans le répertoire du programme. Par défaut, je mets les fichiers à mettre à jour dans ce répertoire. J'espère que vous pourrez indiquer les zones d'optimisation.
Effet après l'exécution :
Recommandations associées :
L'effet de barre de progression à apprendre PyQt5 tous les jours
PyQt5 doit apprendre chaque jour QSplitter pour implémenter la séparation des fenêtres
PyQt5 doit apprendre chaque jour la fonction d'info-bulle
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!