PyQt 5 다운로드 진행 표시 줄 효과 구현
이 과정 에서 자동 업데이트 기능 을 사용 해 야 하기 때문에 다운로드 진도 의 플러그 인 을 써 서 여러분 께 공유 해 드 리 겠 습 니 다.본인 의 프로 그래 밍 수준 이 주문 되 었 으 니 이상 하 게 생각 하지 마 세 요.
인터페이스 파일 UIdownload.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_())
일반적인 다운로드 모듈 입 니 다.호출 을 초기 화 할 때 다운로드 할 주소 만 입력 하면 됩 니 다.다운로드 작업 은 UI 가 막 히 지 않도록 비동기 로 진행 합 니 다.프로그램 디 렉 터 리 에 update 디 렉 터 리 가 존재 하 는 지 확인 합 니 다.기본적으로 저 는 업데이트 할 파일 을 이 디 렉 터 리 아래 에 두 고 최적화 된 부분 이 있 습 니 다.지적 해 주 십시오.실행 후 효과:
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt Designer와 PyQt5로 GUI인 MQTT 구독자를 만들 때의 메모직장의 건물이 신축되었으므로, 각 층의 분전반에 전력계를 설치해, 1곳에서 모니터링할 수 있는 시스템을 구축하려고 생각했다. 전력계는 을 참고로 제작했다. 시스템의 전체도 Windows10상에, 선인의 지혜를 참고로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.