QPushButtonウィジェットとQTextEditウィジェットを作成しました。ボタンをクリックすると、システムは外部プログラムを実行し、ログを出力しますQText編集ウィジェット。pyqtスロットでリアルタイムにログを出力できません
問題は、ログをQTextEditウィジェットに継続的に送ることができないことです。外部プログラムが完了した後、すぐにすべて送信されます。どうして?
これは私のコードです:
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))
そして、私はすでにスレッドでQTextEditウィジェットにsys.stdoutにself.logger.debug()
をリダイレクトし、出力ログしています。
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)
私はボタンをクリックすると、PyQtは、ループfor i in range(10000)
と表示何で立ち往生。数秒後、すべての出力ログが一度に表示され、代わりにリアルタイムで表示されます。
コード例では、別のスレッドで実行されるものはありません。すべてがメインスレッドで実行されるため、メインイベントループがブロックされます。 – ekhumoro