簡體   English   中英

無法在pyqt插槽中實時輸出日志

[英]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()其他線程進行通信,則threadingqueue功能更強大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM