Необходимо передать input / output в GUI

У меня есть приложение написанное на Python.
Я хочу создать графический интерфейс для своего приложения.

Код следующий:

question_variable = 'Question'
a = input('Ask me question: ')
if a == question_variable:
    print('Answer')

Мне нужно создать графический интерфейс и сделать так, чтобы вводимые пользователем данные и ответ программы отображались в графическом интерфейсе.

П.С. Я пытаюсь использовать Tkinter для этих целей, но все мои попытки разобраться в документации и поискать в интернете не дали свои плодов. Поэтому обращаюсь сюда. Спасибо.


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

Автор решения: GrAnd

На примитивном уровне это может выглядеть вот так:

import tkinter as tk

def ask():
    question = question_var.get()
    answer_var.set(f"Вы спросили '{question}'.\nДаже и не знаю что ответить.")
    show_answer()

def ask_question():
    if frames["answer"]:
        frames["answer"].destroy()
        frames["answer"] = None
    frames["question"] = tk.Frame(root)
    frames["question"].pack(fill=tk.BOTH, expand=True)
    tk.Label(frames["question"], text="Задайте ваш вопрос:").pack(padx=5, pady=5) 
    tk.Entry(frames["question"], width=40, textvariable=question_var).pack(padx=15, pady=5) 
    tk.Button(frames["question"], width=15, text="Спросить", command=ask).pack(padx=5, pady=[5,15]) 

def show_answer():
    if frames["question"]:
        frames["question"].destroy()
        frames["question"] = None
    frames["answer"] = tk.Frame(root)
    frames["answer"].pack(fill=tk.BOTH, expand=True)
    tk.Label(frames["answer"], textvariable=answer_var).pack(padx=5, pady=5) 
    tk.Button(frames["answer"], width=15, text="Спросить ещё", command=ask_question).pack(padx=5, pady=[5,15]) 
 
root = tk.Tk()
root.title("Вопрошайка")
root.geometry("300x100")
 
frames = {"question":None, "answer":None}
question_var = tk.StringVar()
answer_var = tk.StringVar()
ask_question()

root.mainloop()
→ Ссылка
Автор решения: S. Nick

Прежде чем запустить мой пример, убедитесь, что вы установили PyQt5

pip install PyQt5
pip install pyqt5-tools

PyQt — реализация фреймворка Qt для языка Python.


import sys
import wikipedia                                       # pip install wikipedia
from PyQt5.Qt import *


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        wikipedia.set_lang("ru")
        
        self.label = QLabel("WikiBot", alignment=Qt.AlignHCenter | Qt.AlignTop )
        font = QFont()
        font.setFamily("Lucida Sans Unicode")
        font.setPointSize(28)
        font.setWeight(75)
        font.setBold(True)
        self.label.setFont(font)
        self.label.setStyleSheet("color: purple;")
        self.label.setObjectName("label")  
        
        self.topic = QLineEdit()
        self.topic.setPlaceholderText("Наберите что-нибудь ...")
        self.topic.setClearButtonEnabled(True)
        font = QFont()
        font.setFamily("Consolas")
        font.setPointSize(18)
        font.setWeight(50)
        font.setBold(False)
        self.topic.setFont(font)
        self.topic.setObjectName("topic")
        
        self.pushButton = QPushButton("Search")
        font = QFont()
        font.setFamily("Corbel")
        font.setPointSize(18)
        font.setWeight(50)
        font.setBold(False)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.run_search)

        self.txtarea = QTextEdit()
        font = QFont()
        font.setFamily("MV Boli")
        font.setPointSize(14)
        self.txtarea.setFont(font)
        self.txtarea.setFrameShape(QFrame.StyledPanel)
        self.txtarea.setFrameShadow(QFrame.Plain)
        self.txtarea.setReadOnly(True)
        self.txtarea.setObjectName("txtarea")        

        layout = QGridLayout(self)
        layout.addWidget(self.label, 0, 0, 1, 2)
        layout.addWidget(self.topic, 1, 0)
        layout.addWidget(self.pushButton, 1, 1)
        layout.addWidget(self.txtarea, 2, 0, 1, 2)
        
    def run_search(self):
        topic = self.topic.text()
        if not topic:
            self.txtarea.setStyleSheet("color: red;")
            self.txtarea.setText("Вы не задали вопро, попробуйте еще раз.")
            return
        try:
            ans = wikipedia.summary(topic)            
            self.txtarea.setStyleSheet("color: Blue;")
            self.txtarea.setText(f'{topic}:\n\n{ans}')
        except:
            self.txtarea.setStyleSheet("color: red;")
            self.txtarea.setText("Что-то пошло не так, попробуйте еще раз.")
        
        
if __name__ == "__main__":
    app  = QApplication(sys.argv)
    w = MainWindow()
    w.resize(500, 300)
    w.show()
    sys.exit(app.exec_())

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

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

→ Ссылка