0

我使用 QtDesigner 和 pyqt4 来设计我的应用程序。我想在 textEdit 中显示 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)

但它在终端中的显示结果不在 textEdit 中。谢谢...

4

1 回答 1

0

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

下面是一个使用 aQProcess运行命令的演示脚本。来自进程的信号连接到一些插槽,然后当它们可用时,它们可以显示来自 stdout 和 stderr 的输出:

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_())
于 2017-01-01T19:05:52.480 回答