簡體   English   中英

如何在pyQt中打印控制台輸出

[英]How to print console output in pyQt

我需要在 Pyqt 窗口中顯示 adb 日志,我試過這樣。 當我單擊按鈕時,調用 log_display 函數,它將控制台輸出設置為 textBrowser。 我嘗試使用子進程但它沒有幫助,窗口只是凍結並且沒有響應。 有什么方法可以做到? 也許我需要為它使用新線程?

def log_display(self):
    result = subprocess.run('adb logcat *:I', stdout=subprocess.PIPE)
    self.textBrowser.setText(subprocess.run('result.stdout'))

您必須使用 QProcess,因為它啟動應用程序但不會阻止 GUI,因為它通過信號通知日志:

from PyQt5 import QtCore, QtGui, QtWidgets


class LogView(QtWidgets.QPlainTextEdit):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setReadOnly(True)
        self._process = QtCore.QProcess()
        self._process.readyReadStandardOutput.connect(self.handle_stdout)
        self._process.readyReadStandardError.connect(self.handle_stderr)

    def start_log(self, program, arguments=None):
        if arguments is None:
            arguments = []
        self._process.start(program, arguments)

    def add_log(self, message):
        self.appendPlainText(message.rstrip())

    def handle_stdout(self):
        message = self._process.readAllStandardOutput().data().decode()
        self.add_log(message)

    def handle_stderr(self):
        message = self._process.readAllStandardError().data().decode()
        self.add_log(message)


if __name__ == "__main__":

    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = LogView()
    w.resize(640, 480)
    w.show()
    w.start_log("adb", ["logcat", "*:I"])

    sys.exit(app.exec_())

暫無
暫無

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

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