如何在没有QProcess的情况下将终端嵌入PyQt5应用程序?
最近,我一直在努力将终端嵌入PyQt GUI应用程序中。几乎尝试了Internet上的所有搜索,但似乎没有任何帮助。
我有一个QTabWidget,我只需要一个选项卡即可拥有一个终端。
这样做完全不可能吗?
是不是有什么样QTabWidget.Tab2.show(terminal-
app)
和默认的终端被显示在TAB2和像每一个功能ls
,ifconfig
,cd
等工作正常?
TIA
-
简短的回答: 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_())