PYQT小笔记(2):控制台内容打印到textEdit控件

实现将控制台内容输出到界面的textEdit中

1.定义一个重定向信号类

# 重定向信号
class EmittingStr(QtCore.QObject):
        textWritten = QtCore.pyqtSignal(str)  # 定义一个发送str的信号

        def write(self, text):
            self.textWritten.emit(str(text))
            loop = QEventLoop()
            QTimer.singleShot(1000, loop.quit)
            loop.exec_()

2.界面中加入方法

    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.界面初始化时连接重定向信号

    class Ui_MainWindow(QtWidgets.QWidget,...):
    	 def __init__(self, parent=None):
       		 super(Ui_MainWindow, self).__init__(parent)
        	 self.setupUi(self)
         # 下面将输出重定向到textEdit中
             sys.stdout = EmittingStr(textWritten=self.outputWritten)
             sys.stderr = EmittingStr(textWritten=self.outputWritten)

 使用此方法,控制台内容是同步显示到控件上的,如果多窗口调用,子窗口实例化后,所有控制台的内容都会定向到子窗口的控件上。(所以个人觉得单一窗口时直接用,多窗口就需要注意相应窗口实例化的时机)

你可能感兴趣的:(学习笔记)