如何让 PySimpleGui 读取我的输入并更新我的 window?

How can I make PySimpleGui read my input and update my window?

我不确定之前是否有人回答过这个问题,如果有重复的话,我很抱歉,但我在任何地方都找不到清楚的地方。

我正在为我的简单 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 中准确地说出一些词。 接下来我想添加一个简单的图形用户界面。

我更希望它看起来更健谈,但由于我缺乏编码经验,我所能想出的只是一个简单的 window,带有 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()
    

它为我带来了一个不错的小 window。 looks like this

我的问题是,当我输入内容并单击按钮时,没有任何反应。当我按下关闭 window (X) 时,我收到一条错误消息:“您已尝试读取关闭的 window 100 次,您需要添加对事件 == WIN_CLOSED 的检查, 错误

既然我有一张支票,还有一个按钮,我不知道为什么它不起作用。也不知道如何获得向我的机器人发送用户文本然后检索机器人输出的按钮。

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

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

您必须只使用一个 .read(),其中 returns 两个值作为元组 (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()