Необходимо передать 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_())

