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