我最近一直在努力在 PyQt GUI 应用程序中嵌入终端。几乎尝试了互联网上的所有搜索,但似乎没有任何帮助。
我有一个 QTabWidget,我只需要一个选项卡就有一个终端。
难道根本不可能这样做吗?
是不是有类似
QTabWidget.Tab2.show(terminal-app)
的东西,并且默认终端显示在 tab2 中,并且像 ls
、ifconfig
、cd
等每个功能都可以正常工作?
P.S - 我已经尝试过这些但没有成功。 在 PyQt5 中嵌入终端
(此处将代码从 PyQt4 转换为 PyQt5,但这不能满足我的需求)如何使用嵌入 PyQt GUI 中的终端
T.I.A
简短回答: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_())
这样的命令,它只是很难写入这样的正在运行的进程。
欢迎贡献! https://github.com/Fuchsiaff/PyQtTerminal
提前感谢您的帮助