J'ai rien compris, mais si tu veux à la fois exécuter du code à un endroit et à un autre, passe soit par un QTimer, soit par un QThread.
2sec dans chatgpt :
Code :
- import sys
- import time
- from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
- from PyQt5.QtCore import QThread
- class Worker(QThread):
- def __init__(self):
- super().__init__()
- self.running = False
- def run(self):
- self.running = True
- print("Thread démarré" )
- while self.running:
- print("Thread actif..." )
- time.sleep(1)
- print("Thread arrêté" )
- def stop(self):
- self.running = False
- class MainWindow(QWidget):
- def __init__(self):
- super().__init__()
- self.worker = Worker()
- self.start_button = QPushButton("Start Thread" )
- self.stop_button = QPushButton("Stop Thread" )
- layout = QVBoxLayout()
- layout.addWidget(self.start_button)
- layout.addWidget(self.stop_button)
- self.setLayout(layout)
- self.start_button.clicked.connect(self.start_thread)
- self.stop_button.clicked.connect(self.stop_thread)
- def start_thread(self):
- if not self.worker.isRunning():
- self.worker.start()
- def stop_thread(self):
- if self.worker.isRunning():
- self.worker.stop()
- app = QApplication(sys.argv)
- window = MainWindow()
- window.show()
- sys.exit(app.exec_())
|
ton bouton start va démarrer ton thread , et va exécuter la méthode run, jusqu'à temps que tu cliques sur stop. Il faut savoir que ton thread principal ( ton application) va gérer la boucle d'événement de ton Qt, il faut que ca puisse continuer à tourner pour réceptionner les événements comme les clics souris sur ton UI. Le thread ( représenté par le Worker ici ) va tourner "en parallèle", et pourra exécuter le code que tu veux.