我如何使PySimpleGui读取我的输入和更新我的窗口?



我不确定以前是否回答过这个问题,抱歉如果是重复的,但我无法在任何地方找到它。

我正在为我的简单AIML聊天机器人制作GUI(主要是娱乐目的)我找到了PySimpleGui。我阅读了它的整个文档,并尝试使用他们的代码,将其实现到我自己的小代码中,我从教程中获得。

最初:


kernel = aiml.Kernel()
kernel.learn("std-startup.xml")
kernel.respond("load aiml b")
while True:
input_text = input("You: ")
response = kernel.respond(input_text)
print("Csigusz Foxoup (bot): "+response)

我得到了这个代码工作,一切都很好(谢谢Misbah)

我让我的机器人准确地说出cmd中的一些单词。接下来我想添加一个简单的gui。

我更希望它看起来更有聊天功能,但由于我缺乏编码经验,我只能想出一个带有2个按钮和2个文本的简单窗口。

内容如下:

import aiml
import PySimpleGUI as sg
kernel = aiml.Kernel()
kernel.learn("std-startup.xml")
kernel.respond("load aiml b")
sg.theme('LightBlue 1')
layout = [[sg.Text('You: '), sg.Text(size=(12,1), key='-mytext-')],
[sg.Text('Csigusz Foxoup (bot): '), sg.Text(size=(12,1), key='-CSI-')],
[sg.Input(key='-myinput-')],
[sg.Button('Send message'), sg.Button('Bye!')]]
window = sg.Window('Csigusz Foxoup, your friend in a box (bot)', layout, [200,400])

while True:
event = window.read()
values = window.read()
if event == sg.WIN_CLOSED or event == 'Bye!':
break
if event == 'Send message':
# change the "output" element to be the value of "input" element
input_text = (values)
response = kernel.respond(input_text)
window['-mytext-'].update(values['-myinput-'])
print("Csigusz Foxoup(bot): "+response)
window.close()

它为我提供了一个漂亮的小窗口。看起来像这样

我的问题是,当我输入一些东西,点击按钮,什么都没有发生。当我按下关闭窗口(X),我得到一个错误消息说:"你已经尝试了100次读取关闭的窗口,你需要添加一个检查事件== WIN_CLOSED, error ">

现在,因为我有一个检查,也是一个按钮,我不知道为什么它不工作。也不知道我怎么能得到按钮发送我的机器人用户文本,然后检索机器人输出。

我做错了什么?提前感谢大家的回复。非常感谢所有的帮助!🙏

你所有的问题都是你使用.read()的方式不对。

您只能使用一个.read(),它将两个值作为元组返回(event, values)

event, values = window.read()
print('event:', event)
print('values:', values)

最小工作代码(不含aiml)

import PySimpleGUI as sg
sg.theme('LightBlue 1')
layout = [[sg.Text('You: '), sg.Text(size=(50,1), key='-mytext-')],
[sg.Text('Csigusz Foxoup (bot): '), sg.Text(size=(50,1), key='-CSI-')],
[sg.Input(key='-myinput-')],
[sg.Button('Send message'), sg.Button('Bye!')]]
window = sg.Window('Csigusz Foxoup, your friend in a box (bot)', layout, [200,400])
while True:
event, values = window.read()
print('event:', event)
print('values:', values)

if event == sg.WIN_CLOSED or event == 'Bye!':
break

if event == 'Send message':
input_text = values['-myinput-']
response = "some response for " + input_text
#response = kernel.respond(input_text)
window['-mytext-'].update(input_text)
window['-CSI-'].update(response)
window.close()

相关内容

  • 没有找到相关文章

最新更新