J'ai créé un widget QPushButton et un widget QTextEdit, et ce que je veux, c'est qu'une fois que je clique sur le bouton, le système exécute un programme externe, et le journal de sortie Widget QTextEdit.Impossible de sortir le journal en temps réel dans un emplacement pyqt
Le problème est que le journal ne peut pas être continuellement envoyé au widget QTextEdit. Il est envoyé en une fois après le programme externe effectué. Pourquoi?
Ceci est mon code:
class Window(Qwidget):
def __init__(self, parent=None):
...
self.button.clicked.connect(self.onStart)
...
def onStart(self):
# keep sending log in this solt, similar to my external program
for i in range(10000):
self.logger.debug(str(i))
Et je l'ai déjà rediriger self.logger.debug()
à sys.stdout, et le journal de sortie à un widget QTextEdit dans un thread.
class myThread(QThread):
printText = pyqtSignal(str)
def __init__(self, parent=None):
super(myThread,self).__init__(parent)
def write(self, output):
self.printText.emit(output)
def flush(self):
pass
def run(self):
while True:
time.sleep(.1)
Lorsque je clique sur le bouton, pyqt se coincer dans la boucle for i in range(10000)
et rien d'affichage. Après quelques secondes, tous les journaux de sortie s'affichent en une seule fois et s'affichent en temps réel.
Il n'y a rien dans votre exemple de code qui s'exécute dans un thread séparé - tout s'exécute dans le thread principal, et donc bloque la boucle d'événements principale. – ekhumoro