réponse courte : Qt5 ne fournit pas l'utilisation du terminal, vous devrez donc utiliser QProcess.
TL;DR
La classe EmbTerminal qui est proposée comme solution est un widget donc il faut l'ajouter avec addTab()
, gardez à l'esprit que vous devez avoir installé le urxvt
terminal (si vous voulez vérifier votre installation lancez urxvt
dans le terminal)
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_())
J'ai le même problème depuis quelques mois maintenant et la solution urxvt ou xterm ne me convient pas, j'ai donc créé un dépôt où je travaille sur un terminal facilement intégrable pour PyQt5. Cela fonctionne pour certaines commandes mais pour les commandes comme python
il a juste du mal à écrire dans un processus en cours d'exécution comme celui-là.
N'hésitez pas à contribuer !https://github.com/Fuchsiaff/PyQtTerminal