代码:
class Signal(QObject):
text_update = pyqtSignal(str)
def write(self, text):
self.text_update.emit(str(text))
QApplication.processEvents()
def isatty(self):
return True
def flush(self):
pass
class MyMainWindow(QMainWindow, Ui_MainWindow, QObject):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent) # 初始化父类属性
self.setupUi(self)
sys.stdout = Signal()
sys.stdout.text_update.connect(self.updatetext)
def updatetext(self, text):
if text == '\n' or str(text).strip() == '': return
self.plainTextEdit_log.appendPlainText(
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ": " + text)
cursor = self.plainTextEdit_log.textCursor()
cursor.movePosition(QTextCursor.End)
关于Signal类:
pytest内部会调用file类的isatty()和flush()两个函数,这里Signal可以认为就是file,定义同名函数实现就可以了。因为不是写入文件,所以flush函数没啥用,pass掉就行。