1.定义一个重定向信号类
1 2 3 4 5 6 7 8 9
| class EmittingStr(QtCore.QObject): textWritten = QtCore.pyqtSignal(str)
def write(self, text): self.textWritten.emit(str(text)) loop = QEventLoop() QTimer.singleShot(1000, loop.quit) loop.exec_()
|
2.界面中加入方法
1 2 3 4 5 6 7 8 9 10 11
| class Ui_MainWindow(QtWidgets.QWidget,...):
''' #添加此方法 def outputWritten(self, text): #self.textEdit.clear() cursor = self.textEdit.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.textEdit.setTextCursor(cursor) self.textEdit.ensureCursorVisible()
|
3.界面初始化时连接重定向信号
1 2 3 4 5 6 7 8
| class Ui_MainWindow(QtWidgets.QWidget,...): def __init__(self, parent=None): super(Ui_MainWindow, self).__init__(parent) self.setupUi(self) sys.stdout = EmittingStr(textWritten=self.outputWritten) sys.stderr = EmittingStr(textWritten=self.outputWritten)
|
使用此方法,控制台内容是同步显示到控件上的,如果多窗口调用,子窗口实例化后,所有控制台的内容都会定向到子窗口的控件上。(所以个人觉得单一窗口时直接用,多窗口就需要注意相应窗口实例化的时机😅)