Вывод консоли на PYQT

Хочу создать текстовый квест на Питоне, с использованием граф.библиотеки PyQt. Есть потребность в выводе консоли, т.к по сути весь квест на ней и работает. введите сюда описание изображения

Как сделать что бы в белом поле выводились данные консоли, а с кнопок можно было отвечать?


Ответы (1 шт):

Автор решения: S. Nick

То, что вы задумали сделать, может выглядеть примерно так (как вариант):

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QLineEdit, \
    QPushButton, QGroupBox, QRadioButton, QVBoxLayout, QGridLayout, QMessageBox
       

class myForm(QWidget): 
    def __init__(self):
        super().__init__()
        
        self.labelName = QLabel("Введите Ваше имя: ")
        self.lineEdit = QLineEdit()
        self.pushButton = QPushButton("Дальше")
        self.pushButton.clicked.connect(self.onClicked)
        
        self.groupBox = QGroupBox("Что будем делать?")
        self.radioButton = QRadioButton("Продолжить", self.groupBox)
        self.radioButton_2 = QRadioButton("Выйти", self.groupBox) 
        layout_V = QVBoxLayout(self.groupBox)        
        layout_V.addWidget(self.radioButton)
        layout_V.addWidget(self.radioButton_2)
        
        self.groupBox_2 = QGroupBox(
            "Вставая, вы осматриваете тусклую комнату. Похоже, что кроме двери и "
            "нескольких стульев ничего нет.")
        self.radioButton_3 = QRadioButton("Попробовать постучать в дверь.", self.groupBox_2)
        self.radioButton_4 = QRadioButton("Осмотреть свои карманы.", self.groupBox_2) 
        layout_V = QVBoxLayout(self.groupBox_2)        
        layout_V.addWidget(self.radioButton_3)
        layout_V.addWidget(self.radioButton_4)  

        self.groupBox_3 = QGroupBox("Результат:")        
        self.label_4  = QLabel(self.groupBox_3)
        self.label_4.setWordWrap(True) 
        self.label_5  = QLabel(self.groupBox_3)
        layout_V = QVBoxLayout(self.groupBox_3)        
        layout_V.addWidget(self.label_4)
        layout_V.addWidget(self.label_5)        
        
        self.text = ''
        self.groupBox_2.hide()
        self.groupBox_3.hide()
        
        gridLayout = QGridLayout(self)
        gridLayout.addWidget(self.labelName, 0, 0)
        gridLayout.addWidget(self.lineEdit, 0, 1)
        gridLayout.addWidget(self.pushButton, 0, 2)
        gridLayout.addWidget(self.groupBox, 1, 0, 1, 3)
        gridLayout.addWidget(self.groupBox_2, 2, 0, 1, 3)
        gridLayout.addWidget(self.groupBox_3, 3, 0, 1, 3)

    def onClicked(self):
        if not self.lineEdit.text():
            self.groupBox_2.hide()
            QMessageBox.information(self, "Информация", "Введите ваше имя!")
            return
            
        # Выбор: Что будем делать?            
        if self.radioButton.isChecked() :
            self.text = self.radioButton.text()
            self.groupBox_2.show()
        elif self.radioButton_2.isChecked():
            QMessageBox.information(
               self, 
               "Информация", 
               f"Уважаемый <b style='color: red;'>{self.lineEdit.text()}</b>, cпасибо, "
               f"что посетили наше приложение!")
            self.close()
            return
        else:
            self.text = ''
            QMessageBox.information(self, "Информация", "Что будем делать?")
            return

        # отвечаем на вопрос `Вставая, вы осматриваете тусклую комнату...`
        if self.radioButton_3.isChecked() :               # Попробовать постучать в дверь.
            self.text = self.radioButton_3.text()
            self.groupBox_3.hide()
        elif self.radioButton_4.isChecked() :             # Осмотреть свои карманы.
            self.text = self.radioButton_4.text()
        else:
            QMessageBox.information(self, "Ответьте на Вопрос", "Что вы будете делать ?")
            return 
            
        self.label_4.setText(f"Уважаемый <b style='color: red;'> {self.lineEdit.text()}</b>")
        self.groupBox_3.show()
        if self.text == "Попробовать постучать в дверь.":
            self.label_5.setText(
                "Просите – и получите, ищите – и найдете, стучите – и вам откроют. <br>"
                "Каждый, кто просит, получает, и кто ищет, находит, и "
                "<b style='color: red;'> кто стучит – тому откроют</b>."
            )
        else:
            self.label_5.setText(f"Даже не знаю, что вам сказать.")
       
        
if __name__=="__main__":
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    w = myForm()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка