如何在没有 QProcess 的情况下在 PyQt5 应用程序中嵌入终端?

v1h*_*1h5 7 python pyqt python-3.x qtabwidget pyqt5

我最近一直在努力在 PyQt GUI 应用程序中嵌入一个终端。几乎尝试了互联网上的所有搜索,但似乎没有任何帮助。

我有一个 QTabWidget,我只需要一个选项卡就有一个终端。

根本不可能这样做吗?

是不是有什么样QTabWidget.Tab2.show(terminal-app)和默认的终端被显示在TAB2和像每一个功能lsifconfigcd等工作正常?

PS - 我已经尝试过这些,但没有成功。 在 PyQt5 中嵌入终端

(此处将代码从 PyQt4 转换为 PyQt5,但这不能满足我的需求)如何使用嵌入在 PyQt GUI 中的终端

TIA

eyl*_*esc 5

简短回答: Qt5 不提供终端的使用,因此您必须使用 QProcess。

TL; 博士

作为解决方案提出的 EmbTerminal 类是一个小部件,因此您必须添加它addTab(),请记住您必须已安装urxvt终端(如果您想检查您urxvt在终端中运行的安装)

import sys
from PyQt5 import QtCore, QtWidgets


class EmbTerminal(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(EmbTerminal, self).__init__(parent)
        self.process = QtCore.QProcess(self)
        self.terminal = QtWidgets.QWidget(self)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.terminal)
        # Works also with urxvt:
        self.process.start('urxvt',['-embed', str(int(self.winId()))])
        self.setFixedSize(640, 480)


class mainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(mainWindow, self).__init__(parent)

        central_widget = QtWidgets.QWidget()
        lay = QtWidgets.QVBoxLayout(central_widget)
        self.setCentralWidget(central_widget)

        tab_widget = QtWidgets.QTabWidget()
        lay.addWidget(tab_widget)

        tab_widget.addTab(EmbTerminal(), "EmbTerminal")
        tab_widget.addTab(QtWidgets.QTextEdit(), "QTextEdit")
        tab_widget.addTab(QtWidgets.QMdiArea(), "QMdiArea")


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = mainWindow()
    main.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)