[英]Can't output log in real time in a pyqt slot
我創建了一個QPushButton小部件和一個QTextEdit小部件,我想要的是一旦單擊按鈕,系統將執行一個外部程序,並將日志輸出到QTextEdit小部件。
問題在於日志無法連續發送到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))
而且我已經將self.logger.debug()
重定向到sys.stdout,並將日志輸出到線程中的QTextEdit小部件。
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)
停留在for i in range(10000)
循環中for i in range(10000)
什么也不顯示。 幾秒鍾后,所有輸出日志一次全部顯示,而是實時顯示。
根據ekhumoro的建議,我將循環放入線程中:
def onStart(self):
_thread.start_new_thread(self.myLoop, ())
def myLoop(self):
for i in range(10000):
self.logger.debug(i)
_thread
模塊符合我的功能要求,並且在這里工作良好。 如果需要與myLoop()
其他線程進行通信,則threading
和queue
功能更強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.