Как встроить терминал URxvt в Pyqt5 GUI? - PullRequest
0 голосов
/ 05 марта 2020

Я построил GUI в QtChooser, и код для него написан на PyQt5. В GUI у меня есть 7 вкладок, каждая из которых определена в классе QMainWindow моего кода. Эти определения содержат коды для каждого TextEdit, LineEdit, PushButtons, RadioButtons и т. Д. c. Тем не менее, в одной из вкладок я хочу встроить внешний терминал, который будет открываться при нажатии определенной кнопки на этой вкладке. Я смог открыть терминал Urxvt при переключении RadioButton. Проблема, с которой я сейчас сталкиваюсь, заключается в том, чтобы открыть терминал именно в области TextEdit. Вот так выглядит оригинальная GUI (встроенная в QtDesigner. Мне нужно, чтобы терминал открывался в TextEdit под надписью Output. Но, вот как терминал открывается в GUI когда код запускается Это часть обновленного кода:

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QMessageBox, QAction
from PyQt5.QtCore import QDate, QTime, QDateTime, Qt
import sys
import platform
import os
import subprocess
import time
import re
import textwrap

class EmbTerminal(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(EmbTerminal, self).__init__()
        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())), '-bg', '#000000', '-fg', '#ffffff'])
        self.setFixedSize(539, 308)

class Ui_Dialog(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui_Dialog, self).__init__()
        #Load GUI from QT5 Designer
        uic.loadUi("S1_mainwindow.ui", self)

def openTerminalCheckBox (self):
        if self.openTerminalRMachineRadioButton.isChecked():
            status = True
            self.commandLineRemoteCommandRMachineLineEdit.setDisabled(True)
            self.commandlineRemoteCommandRMachineLabel.setDisabled(True)
            self.executeRemoteCommandRMachinePushButton.setDisabled(True)
            self.remoteMachineOutputLabel.setText("Terminal")

            self.outputRMachineTextEdit = QtWidgets.QTabWidget()
            self.gridLayout_6.addWidget(self.outputRMachineTextEdit)

            self.outputRMachineTextEdit.addTab(EmbTerminal(), "EmbTerminal")
        else:
            status = False
app = QtWidgets.QApplication(sys.argv) # Create an instance of QtWidgets.QApplication
window = Ui_Dialog()
main = mainWindow()
main.show() # Create an instance of our class
app.exec_()

Мне нужно открыть терминал специально в QTextEdit, который уже был определен на этой вкладке. есть предложения / пожелания?

...