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

问题描述 投票:0回答:3

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

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

难道根本不可能这样做吗?

是不是有类似

QTabWidget.Tab2.show(terminal-app)
的东西,并且默认终端显示在 tab2 中,并且像
ls
ifconfig
cd
等每个功能都可以正常工作?

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

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

T.I.A

python python-3.x pyqt pyqt5 qtabwidget
3个回答
5
投票

简短回答:Qt5不提供终端的使用,所以你必须使用QProcess。

TL;博士

作为解决方案提出的 EmbTerminal 类是一个小部件,因此您必须使用

addTab()
添加它,请记住,您必须安装
urxvt
终端(如果您想检查安装情况,请在终端)

urxvt



3
投票
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


0
投票

提前感谢您的帮助

© www.soinside.com 2019 - 2024. All rights reserved.