如何在 pyqt4 中的 textEdit 中显示 os.system()



我使用 QtDesigner 和 pyqt4 来设计我的应用程序。我想在文本编辑中显示 os.system() 函数结果!这是我的代码:

def aiaa(self):
    import os
    ss = os.system("systemctl status tor.service")
    self.textEdit.setText(str(ss))
def setupUi(self, MainWindow):
    self.textEdit = QtGui.QTextEdit(self.centralwidget)
    self.textEdit.setGeometry(QtCore.QRect(40, 10, 351, 201))
    self.textEdit.setObjectName(_fromUtf8("textEdit"))
    self.pushButton = QtGui.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(170, 250, 94, 32))
    self.pushButton.setObjectName(_fromUtf8("pushButton"))
    self.pushButton.clicked.connect(self.aiaa)

但它的显示结果是终端而不是文本编辑。谢谢。。。

您的示例不起作用的原因是os.system返回命令的退出代码,而不是其输出(仅打印在 stdout 上)。还有其他问题为此提供了一些标准的python解决方案,但是由于您使用的是PyQt。我想我会展示Qt的做事方式。

下面是一个使用QProcess来运行命令的演示脚本。来自进程的信号连接到一些插槽,然后可以在标准输出和标准输出的输出可用时显示

它们:
import sys
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.display = QtGui.QTextEdit(self)
        self.display.setReadOnly(True)
        self.command = QtGui.QLineEdit(self)
        self.button = QtGui.QPushButton('Run Command', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.display)
        layout.addWidget(self.command)
        layout.addWidget(self.button)
        self.process = QtCore.QProcess(self)
        self.process.readyReadStandardOutput.connect(self.handleStdOut)
        self.process.readyReadStandardError.connect(self.handleStdErr)
    def handleButton(self):
        self.process.start(self.command.text())
    def handleStdOut(self):
        data = self.process.readAllStandardOutput().data()
        self.display.append(data.decode('utf-8'))
    def handleStdErr(self):
        data = self.process.readAllStandardError().data()
        self.display.append(data.decode('utf-8'))
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 100, 500, 400)
    window.command.setText('systemctl status tor.service')
    window.show()
    sys.exit(app.exec_())

最新更新