Saltar al contenido

¿Cómo incrustar el terminal dentro de la aplicación PyQt5 sin QProcess?

Solución:

respuesta corta: Qt5 no proporciona el uso del terminal, por lo que tendrá que usar QProcess.

TL; DR

La clase EmbTerminal que se propone como solución es un widget por lo que debe agregarlo con addTab(), tenga en cuenta que debe haber instalado el urxvt terminal (si desea verificar su instalación, ejecute urxvt en la 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_())

He tenido el mismo problema durante algunos meses y la solución urxvt o xterm no me sirve, así que creé un repositorio en el que estoy trabajando en una terminal fácilmente integrable para PyQt5. Funciona para algunos comandos pero para comandos como python simplemente tiene problemas para escribir en un proceso en ejecución como ese.

¡Siéntete libre de contribuir! https://github.com/Fuchsiaff/PyQtTerminal

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *