PyQt5 – 如何在使用urllib下载时自动设置进度条?

PyQt5 – 如何在使用urllib下载时自动设置进度条?

PyQt5 是开发Python GUI桌面应用程序方面的新兴GUI库之一。它具有丰富和强大的功能,确保了应用程序的生产质量。学习PyQt5库是对你知识的一种补充。你可以开发你的消费者质量、高度专业的应用程序。

在这篇文章中,我们将学习如何 在PyQt5中 实现 进度条 的自动化 我们所说的自动化是指动态地改变和设置 进度条 的值 假设你正在互联网上下载任何文件,并希望显示下载的进度,那么这篇文章一定会帮助你。

在本例中,我们正在使用 Urllib 库来下载文件,因为它是使用python下载文件最常用的库。

语法:

self.progressBar = QProgressBar(self)

QProgressBar类是用来创建进度条对象的。

首先,请看下面的代码,然后我们将解释整个事情的作用。

代码:

# importing libraries
import urllib.request
from PyQt5.QtWidgets import *
import sys
 
class GeeksforGeeks(QWidget):
 
    def __init__(self):
        super().__init__()
 
        # calling a defined method to initialize UI
        self.init_UI()
 
    # method for creating UI widgets
    def init_UI(self):
 
        # creating progress bar
        self.progressBar = QProgressBar(self)
 
        # setting its size
        self.progressBar.setGeometry(25, 45, 210, 30)
 
        # creating push button to start download
        self.button = QPushButton('Start', self)
 
        # assigning position to button
        self.button.move(50, 100)
 
        # assigning activity to push button
        self.button.clicked.connect(self.Download)
 
        # setting window geometry
        self.setGeometry(310, 310, 280, 170)
 
        # setting window action
        self.setWindowTitle("GeeksforGeeks")
 
        # showing all the widgets
        self.show()
 
    # when push button is pressed, this method is called
    def Handle_Progress(self, blocknum, blocksize, totalsize):
 
        ## calculate the progress
        readed_data = blocknum * blocksize
 
        if totalsize > 0:
            download_percentage = readed_data * 100 / totalsize
            self.progressBar.setValue(download_percentage)
            QApplication.processEvents()
 
    # method to download any file using urllib
    def Download(self):
 
        # specify the url of the file which is to be downloaded
        down_url = '' # specify download url here
 
        # specify save location where the file is to be saved
        save_loc = 'C:\Desktop\GeeksforGeeks.png'
 
        # Downloading using urllib
        urllib.request.urlretrieve(down_url,save_loc, self.Handle_Progress)
 
 
# main method to call our app
if __name__ == '__main__':
 
    # create app
    App = QApplication(sys.argv)
 
    # create the instance of our window
    window = GeeksforGeeks()
 
    # start the app
    sys.exit(App.exec())

解释一下。

下面是 urllib 的语法 我们必须研究它的所有参数。

语法: urllib.request.urlretrieve(url, filename, reporthook)

参数: 这个方法将采取以下参数

第一个参数 是要下载的文件的网址。

第二个参数, 如果存在,指定保存文件的位置(如果这个参数没有通过,位置将是一个自动生成的名称的临时文件)。

第三个参数 是一个可调用文件,当文件被下载时,将被调用,每个区块将被读取,一次又一次。该可调用程序(在本例中是一个函数Handle_Progress)将作为三个参数被传递。

  • 到目前为止传输的块的数量(blocknum)。
  • 以字节为单位的块大小(blocksize)
  • 文件的总大小(totalsize)。

因此,函数 Handle_Progress 接收三个参数。当前下载的文件大小是通过乘以blocknum和blocksize来动态计算的,并存储在变量readed_data中。

其余的工作由计算百分比的公式完成。我们把readed_data乘以100,然后除以文件的总大小。这就给了我们当前的下载百分比。然后我们使用 progressBar 对象的 setValue() 方法将这个下载百分比设置到进度条上。

self.progressBar.setValue(download_percentage)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程