Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3064 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  PyQt6 : While True ==> Stopper la boucle / QButton

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PyQt6 : While True ==> Stopper la boucle / QButton

n°2518472
erwan83
Du Shift DEL tu te méfieras !
Posté le 21-02-2026 à 09:56:37  profilanswer
 

Bonjour.
 
La question est dans le sujet
 
Un QPushButton lance refresh
 

Code :
  1. self.bouton_refresh = QPushButton(' Refresh ',self)
  2. self.bouton_refresh.clicked.connect(self.refresh)


 
Un QPushButton de STOP
 

Code :
  1. self.bouton_stop = QPushButton(' Stop ',self)
  2.         self.bouton_stop.clicked.connect(self.stop_timer)


 

Code :
  1. def stop_timer(x)
  2. global running ## indique si OUI ou NON je fais tourner la fct
  3.         global POSITION_REFRESH  ## correspond à la position du bouton qui lance la fonction refresh
  4.         running = True


La fonction qui tourne "en boucle"

Code :
  1. def refresh(self):
  2.         global running ## indique si OUI ou NON je fais tourner la fct
  3.         global POSITION_REFRESH  ## correspond à la position du bouton qui lance la fonction refresh
  4.         running = True
  5.         while running == True:
  6.             do code


 
J'ai fait évoluer le sujet.
 
j'ai donc un bouton STOP mais je voudrais qu'il puisse agir DANS la fct refresh
En effet, je peux lui déclarer une fct qui va dire que running = False
Mais comment lier cela à l'éxécution de la fct refresh ?
 
Merci !!


Message édité par erwan83 le 21-02-2026 à 14:00:08
mood
Publicité
Posté le 21-02-2026 à 09:56:37  profilanswer
 

n°2520281
xilebo
noone
Posté le 16-03-2026 à 21:08:47  profilanswer
 

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 :
  1. import sys
  2. import time
  3. from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
  4. from PyQt5.QtCore import QThread
  5. class Worker(QThread):
  6.     def __init__(self):
  7.         super().__init__()
  8.         self.running = False
  9.     def run(self):
  10.         self.running = True
  11.         print("Thread démarré" )
  12.         while self.running:
  13.             print("Thread actif..." )
  14.             time.sleep(1)
  15.         print("Thread arrêté" )
  16.     def stop(self):
  17.         self.running = False
  18. class MainWindow(QWidget):
  19.     def __init__(self):
  20.         super().__init__()
  21.         self.worker = Worker()
  22.         self.start_button = QPushButton("Start Thread" )
  23.         self.stop_button = QPushButton("Stop Thread" )
  24.         layout = QVBoxLayout()
  25.         layout.addWidget(self.start_button)
  26.         layout.addWidget(self.stop_button)
  27.         self.setLayout(layout)
  28.         self.start_button.clicked.connect(self.start_thread)
  29.         self.stop_button.clicked.connect(self.stop_thread)
  30.     def start_thread(self):
  31.         if not self.worker.isRunning():
  32.             self.worker.start()
  33.     def stop_thread(self):
  34.         if self.worker.isRunning():
  35.             self.worker.stop()
  36. app = QApplication(sys.argv)
  37. window = MainWindow()
  38. window.show()
  39. 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.

n°2520282
xilebo
noone
Posté le 16-03-2026 à 21:14:37  profilanswer
 

une précision dans ce que tu as écrit ( car c'est du pseudo code, ca n'est pas la bonne syntaxe python). Ta fonction refresh qui est attachée à un signal clicked de ton QPushButton est une fonction avec une boucle infinie. Dès que tu vas cliquer, elle n'en sortira jamais et tu bloques ton thread principal qui gère ta boucle d'événement. A mon avis, le code que tu as écrit et que tu as du tester se bloque dès que tu cliques sur ce bouton. Tu ne dois jamais attacher un slot qui ne retourne pas immédiatement, sinon tu bloques toute ta boucle d'événement. Soit tu passes par des timers (QTimer) pour différer une exécution, soit tu fais carrément des thread.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  PyQt6 : While True ==> Stopper la boucle / QButton

 

Sujets relatifs
Mise en route d'un programme nommé graphy dans visual studioArrêt d'un processus d'un programme script batch
Powershell : Lancement programme + notificationFor/While en récursif
Automatiser le programme actuel, que faire?Duree d'execution programme java
Accélerer l'exécution de mon programme en VBAProgramme tri à bulle C++
Automatiser programme fenêtré (Tcl)Anomalie d'un programme réseau
Plus de sujets relatifs à : PyQt6 : While True ==> Stopper la boucle / QButton


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)