相关疑难解决方法(0)

如何从Python日志记录模块获取非阻塞/实时行为?(输出到PyQt QTextBrowser)

描述:我编写了一个自定义日志处理程序,用于捕获日志事件并将它们写入QTextBrowser对象(如下所示,示例代码示例).

问题:按下按钮调用someProcess().这会将两个字符串写入logger对象.但是,字符串仅在someProcess()返回后出现.

问题:如何立即/实时地将记录的字符串显示在QTextBrowser对象中?(即一旦logger调用输出方法)

from PyQt4 import QtCore, QtGui
import sys
import time
import logging
logger = logging.getLogger(__name__)

class ConsoleWindowLogHandler(logging.Handler):
    def __init__(self, textBox):
        super(ConsoleWindowLogHandler, self).__init__()
        self.textBox = textBox

    def emit(self, logRecord):
        self.textBox.append(str(logRecord.getMessage()))

def someProcess():
    logger.error("line1")
    time.sleep(5)
    logger.error("line2")

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = QtGui.QWidget()
    textBox = QtGui.QTextBrowser()
    button = QtGui.QPushButton()
    button.clicked.connect(someProcess)
    vertLayout = QtGui.QVBoxLayout()
    vertLayout.addWidget(textBox)
    vertLayout.addWidget(button)
    window.setLayout(vertLayout)
    window.show()
    consoleHandler = ConsoleWindowLogHandler(textBox)
    logger.addHandler(consoleHandler)
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@abarnert的回答,我设法使用QThread编写了这段工作代码.我QThread为了 …

python logging pyqt nonblocking qtextbrowser

8
推荐指数
1
解决办法
6343
查看次数

标签 统计

logging ×1

nonblocking ×1

pyqt ×1

python ×1

qtextbrowser ×1