将控制台的运行信息及错误信息输出到textedit组件
from PySide2 import QtCore, QtGui
import sys
from PySide2.QtCore import QEventLoop, QTimer
from PySide2.QtWidgets import QApplication, QMainWindow
from Ui_main import Ui_MainWindow
import os
from PySide2.QtCore import Slot
# self.textEdit是自定义的组件名称
class EmittingStr(QtCore.QObject):
textWritten = QtCore.Signal(str) # 定义一个发送str的信号,这里用的方法名与PyQt5不一样
def write(self, text):
self.textWritten.emit(str(text))
loop = QEventLoop()
QTimer.singleShot(1000, loop.quit)
loop.exec_()
class ControlBoard():
def __init__(self):
qfile_main_path = os.path.join(os.getcwd(), 'qt_ui', 'autoGit.ui')
print(qfile_main_path)
qfile_main = QFile(qfile_main_path)
qfile_main.open(QFile.ReadOnly)
qfile_main.close()
self.ui = QUiLoader().load(qfile_main)
# 固定格式,控制台的运行信息和错误信息的处理函数与textEdit产生关联
sys.stdout = EmittingStr()
self.ui.textEdit_console.connect(sys.stdout, SIGNAL("textWritten(QString)"), self.outputWritten)
sys.stderr = EmittingStr()
self.ui.textEdit_console.connect(sys.stderr, SIGNAL("textWritten(QString)"), self.outputWritten)
@Slot()
def outputWritten(self, text):
cursor = self.ui.textEdit_console.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.ui.textEdit_console.setTextCursor(cursor)
self.ui.textEdit_console.ensureCursorVisible()
def execCmd(self, cmd):
r = os.popen(cmd)
text = r.read()
r.close()
return text
def bClicked(self):
print(self.execCmd("dir"))
if __name__ == "__main__":
app = QApplication(sys.argv)
win = ControlBoard()
win.show()
sys.exit(app.exec_())
参考链接:
https://blog.csdn.net/weixin_43469047/article/details/115587415
https://github.com/Delay-n-days/pyside2_cmd_gui