Вывод консоли на 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_())
