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

如何解决如何让 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 个文本的简单窗口。

cood 看起来像这样:

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): '),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()
    

它为我提供了一个漂亮的小窗口。 looks like this

我的问题是,当我输入内容并单击按钮时,没有任何反应。当我按下关闭窗口 (X) 时,我收到一条错误消息:“您已经尝试了 100 次来读取关闭的窗口,您需要添加对 event == 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): '),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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?