Neste tutorial, vamos abordar como criar uma aplicação em PyQt que executa múltiplas tarefas de forma simultânea utilizando threads, e exibe uma barra de progresso para acompanhar o progresso de cada tarefa.
PyQt é uma biblioteca de interface gráfica para Python que permite criar aplicativos GUI de forma fácil e eficiente. Com a ajuda de threads, é possível executar várias tarefas em paralelo, mantendo a interface do aplicativo responsiva.
Vamos começar definindo a interface gráfica da nossa aplicação. Para isso, iremos criar uma janela principal com uma barra de progresso e um botão para iniciar as tarefas:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QPushButton, QProgressBar, QWidget
class App(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Multitarefas com PyQt Threads')
self.setGeometry(100, 100, 400, 200)
layout = QVBoxLayout()
self.progress_bar = QProgressBar()
layout.addWidget(self.progress_bar)
self.start_button = QPushButton('Iniciar Tarefas')
self.start_button.clicked.connect(self.start_tasks)
layout.addWidget(self.start_button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def start_tasks(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
Neste código, criamos uma classe App
que herda de QMainWindow
e definimos o método initUI()
para criar a interface gráfica da aplicação. A janela possui uma barra de progresso e um botão para iniciar as tarefas. Quando o botão for clicado, o método start_tasks()
será chamado.
Agora, vamos implementar a lógica para executar as tarefas em threads e atualizar a barra de progresso conforme o progresso de cada tarefa:
import time
from PyQt5.QtCore import QThread, pyqtSignal
class Worker(QThread):
update_progress = pyqtSignal(int)
def __init__(self):
super().__init()
def run(self):
for i in range(1, 101):
time.sleep(0.1)
self.update_progress.emit(i)
class App(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# Código da interface gráfica
self.worker = Worker()
self.worker.update_progress.connect(self.update_progress)
def start_tasks(self):
self.worker.start()
def update_progress(self, value):
self.progress_bar.setValue(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
Neste código, criamos uma subclasse de QThread
chamada Worker
, que executará as tarefas em paralelo. A cada iteração do loop no método run()
, o sinal update_progress
é emitido com o valor atual do progresso. Também conectamos este sinal ao método update_progress()
da classe App
, que atualiza a barra de progresso com o valor recebido.
Agora, nossa aplicação está pronta para executar múltiplas tarefas em threads e atualizar a barra de progresso de forma assíncrona. Você pode adicionar mais lógica à classe Worker
para realizar tarefas específicas de acordo com suas necessidades.
Espero que este tutorial tenha sido útil para você criar uma aplicação com multitarefas e barra de progresso em PyQt usando threads. Se tiver alguma dúvida ou sugestão, não hesite em deixar um comentário. Obrigado por ler!