Python >> Tutoriel Python >  >> Python GUI >> PyQt GUI

Comment intégrer un terminal dans l'application PyQt5 sans QProcess ?

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