PyQt5: ¿cómo automatizar la barra de progreso durante la descarga usando urllib?

PyQt5 es una de las bibliotecas GUI emergentes en términos de desarrollo de aplicaciones de escritorio GUI de Python. Tiene una funcionalidad rica y robusta que garantiza aplicaciones de calidad de producción. Aprender la biblioteca PyQt5 es un complemento a su conocimiento. Puede desarrollar sus aplicaciones altamente profesionales y de calidad para el consumidor.

En este artículo, aprenderemos cómo automatizar la barra de progreso en PyQt5 . Al automatizar lo que queremos decir es cambiar dinámicamente y establecer el valor de la barra de progreso. Supongamos que está descargando cualquier archivo a través de Internet y desea mostrar el progreso de la descarga, entonces este artículo seguramente lo ayudará.

En el presente ejemplo, estamos usando el U rllibbiblioteca para descargar los archivos, ya que es la biblioteca más común para descargar archivos usando python.

Sintaxis: 

self.progressBar = QProgressBar(self)
La clase QProgressBar es para crear el objeto de la barra de progreso.
 

En primer lugar, revise el siguiente código, luego le explicaremos qué hace todo.

Código:  

Python3

# 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())

Explicación : 

A continuación se muestra la sintaxis de urllib , tenemos que estudiar todos los parámetros que toma.  

Sintaxis: urllib.request.urlretrieve(url, nombre de archivo, reporthook)

Parámetros: Este método tomará los siguientes parámetros :

El primer parámetro es la URL del archivo que se va a descargar.

El segundo parámetro , si está presente, especifica la ubicación del archivo para guardar el archivo (si no se pasa este argumento, la ubicación será un archivo temporal con un nombre generado automáticamente).

El tercer parámetro es un invocable que se llamará cuando se descargue el archivo y, una vez tras otra, se leerá cada bloque. El invocable (que es una función Handle_Progress en este caso) se pasará como tres argumentos:

  • un recuento de bloques transferidos hasta el momento (blocknum)
  • tamaño de bloque en bytes (blocksize)
  • el tamaño total del archivo (totalsize)

La función Handle_Progress por lo tanto recibe tres argumentos. El tamaño descargado actual del archivo se calcula dinámicamente multiplicando blocknum y blocksize y se almacena en la variable readed_data.

El resto del trabajo lo realiza la fórmula para calcular el porcentaje. Multiplicamos readed_data por 100 y lo dividimos por el tamaño total del archivo. Nos da el porcentaje de descarga actual. Luego establecemos este porcentaje de descarga en la barra de progreso usando el método setValue() del objeto ProgressBar.

self.progressBar.setValue(download_percentage)

Producción : 

Publicación traducida automáticamente

Artículo escrito por tejinder2000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *