You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PySimpleGUI开发时Add按钮仅能正常工作一次是什么原因?

问题原因

add_window仅在程序启动时全局初始化了一次,第一次点击「Add」按钮完成提交后,你调用了add_window.close()将该窗口对象销毁,第二次点击「Add」时尝试对已销毁的窗口执行read()操作,自然无法正常响应。

修复方法

将add_window的创建逻辑移到-ADD-事件的处理分支中,每次点击「Add」都生成新的添加窗口,用完关闭即可,下次点击会重新创建新的窗口实例。
修正后代码如下:

# 你提前定义的添加窗口布局adicionar_layout保持原样即可,下方示例仅做参考
adicionar_layout = [
    [sg.Text("请输入名称:")],
    [sg.Input(key='-INPUTADD-')],
    [sg.Button("提交", key='-SUBMIT-')]
]

# 主窗口布局保持不变
layout = [
    [sg.Text("Index")],
    [sg.Listbox(load_list(), size=(17,16), key='-LISTBOX-')],
    [sg.Button("Add", key='-ADD-'), sg.Button("Delete", key='-DELETE-')]
]

window = sg.Window("Index", layout)

# 事件循环
while True:
    event, values = window.read()
    if event is None:
        break
    if event == '-ADD-':
        # 每次点击Add都新建添加窗口,不要放到全局初始化
        add_window = sg.Window('Add a name', adicionar_layout)
        add, input_val = add_window.read()
        if add == '-SUBMIT-':
            new_name = input_val.get('-INPUTADD-')
            with open('saved_names.txt', 'a') as f:
                f.write('\n' + new_name)
            window['-LISTBOX-'].update(load_list())
            print(load_list())
        # 不管是点提交还是直接关闭添加窗口,都销毁当前实例
        add_window.close()

window.close()

额外优化说明

  • 原代码中input是Python内置关键字,不要用作变量名避免冲突,上述代码已修改为input_val
  • PySimpleGUI更新元素的写法可以简化为window['键名'].update(新值),和你原有Element写法效果完全一致

内容的提问来源于stack exchange,提问作者zezad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:48:01