Совместить код графического интерфейса Tkinter с программой
Я пытаюсь сделать бота Akinator с помощью akinator-api. Для создания окна "чата с ботом" я использую Tkinter. Вот код моего окна:
from tkinter import *
window = Tk()
messages = Text(window, bg="SkyBlue1", fg='gray5', font='Arial 14', wrap=WORD)
messages.pack()
input_user = StringVar()
input_field = Entry(window, font='Arial 14', bg="azure2", text=input_user)
input_field.pack(side=TOP, fill=X)
def Enter_pressed(event):
input_get = input_field.get()
messages.insert(INSERT, '%s\n' % ('Я: ' + input_get))
# label = Label(window, text=input_get)
input_user.set('')
# label.pack()
return input_get
frame = Frame(window) # , width=300, height=300)
input_field.bind("<Return>", Enter_pressed)
frame.pack()
window.mainloop()
Вот код основного цикла моей программы:
while True:
while aki.progression <= 80:
a = input(q + "\n\t")
if a == "Повтори прошлый вопрос":
try:
q = aki.back()
except akinator.CantGoBackAnyFurther:
pass
else:
q = aki.answer(a)
aki.win()
correct = input(f"Это {aki.first_guess['name']} ({aki.first_guess['description']})! Я права?\n\t")
if correct.lower() == "да":
print("Хаха!!! Я выигрыла!!!\n")
break
else:
print("Вы выиграли. Печалька... Продолжим отгадывать?\n")
correct = input()
if correct.lower() == "нет":
break
else:
aki.progression = 0
Подскажите, как я могу заменить строку
a = input(q + "\n\t")
На чтение из input_field? Но нужно обновлять окно, чтобы введенное слово после нажатия на Enter выводилось в окне, как в исходном коде окна. Попытался сделать так:
from tkinter import *
window = Tk()
messages = Text(window, bg="SkyBlue1", fg='gray5', font='Arial 14', wrap=WORD)
messages.pack()
input_user = StringVar()
input_field = Entry(window, font='Arial 14', bg="azure2", text=input_user)
input_field.pack(side=TOP, fill=X)
def Enter_pressed(event):
input_get = input_field.get()
if input_get == "Повтори прошлый вопрос":
try:
q = aki.back()
except akinator.CantGoBackAnyFurther:
pass
else:
q = aki.answer(input_get)
messages.insert(INSERT, '%s\n' % ('Я: ' + input_get))
# label = Label(window, text=input_get)
input_user.set('')
# label.pack()
return input_get
frame = Frame(window) # , width=300, height=300)
if aki.progression <= 80:
messages.insert(INSERT, '%s\n' % ('Акинатор: ' + q))
input_field.bind("<Return>", Enter_pressed)
frame.pack()
window.mainloop()
aki.win()
correct = input(f"Это {aki.first_guess['name']} ({aki.first_guess['description']})! Я права?\n\t")
if correct.lower() == "да":
print("Хаха!!! Я выигрыла!!!\n")
sys.exit()
else:
print("Вы выиграли. Печалька... Продолжим отгадывать?\n")
correct = input()
if correct.lower() == "нет":
sys.exit()
else:
aki.progression = 0
Но почему-то сначала вводится первый вопрос, я отвечаю на него, а нового вопроса не появляется Получилось, только остается проблема с получением информации, правильно ли ответил акинатор. Это переменная correct
from tkinter import *
window = Tk()
def Enter_pressed(event):
if aki.progression <= 80:
input_get = input_field.get()
if input_get == "Повтори прошлый вопрос":
try:
q = aki.back()
except akinator.CantGoBackAnyFurther:
pass
else:
q = aki.answer(input_get)
messages.insert(INSERT, '%s\n' % ('Я: ' + input_get))
# label = Label(window, text=input_get)
input_user.set('')
# label.pack()
messages.insert(INSERT, '%s\n' % ('Акинатор: ' + q))
else:
aki.win()
messages.insert(INSERT, '%s\n' % ('Акинатор: ' + f"Это {aki.first_guess['name']} ({aki.first_guess['description']})! Я права?\n\t"))
input_field.bind("<Return>", Enter_pressed)
correct = input_field.get()
if correct.lower() == "да":
messages.insert(INSERT, '%s\n' % ('Акинатор: ' + "Хаха!!! Я выигрыла!!!\n"))
return
else:
messages.insert(INSERT, '%s\n' % ('Акинатор: ' + "Вы выиграли. Печалька... Продолжим отгадывать?\n"))
input_field.bind("<Return>", Enter_pressed)
correct = input_field.get()
if correct.lower() == "нет":
return
else:
aki.progression = 0
messages = Text(window, bg="SkyBlue1", fg='gray5', font='Arial 14', wrap=WORD)
messages.pack()
input_user = StringVar()
input_field = Entry(window, font='Arial 14', bg="azure2", text=input_user)
input_field.pack(side=TOP, fill=X)
input_field.bind("<Return>", Enter_pressed)
messages.insert(INSERT, '%s\n' % ('Акинатор: ' + q))
window.mainloop()