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

发布于 2021-01-29 17:29:37

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

我有一个QTabWidget,我只需要一个选项卡即可拥有一个终端。

这样做完全不可能吗?

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

TIA

关注者
0
被浏览
143
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    简短的回答: Qt5不提供使用终端的功能,因此您将不得不使用QProcess。

    TL; DR

    建议作为解决方案的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_())
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看