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

PySimpleGUI触发sg.WIN_CLOSED事件无法读取输入框内容如何解决

问题原因
  • PySimpleGUI 的 window.read() 方法在触发 sg.WIN_CLOSED 事件(用户点击窗口右上角关闭按钮)时,返回的 values 为 None,而非正常交互事件返回的控件值字典,因此直接对 values 执行下标取值操作就会抛出 'NoneType' object is not subscribable 错误。
  • -SAVEAS- 属于窗口内正常交互事件,此时 values 是完整的控件键值对字典,所以取值逻辑正常。
解决方法

有两种常用修复方案,可按需选择:

方案1:拆分事件分支分别处理

将窗口关闭事件和EXIT按钮点击事件拆分判断,避免混用values的场景:

#create Window
window = sg.Window('Digispark BADUSB Script Creator', layout, size=(1500, 500))

#Eventloop
while True:
    event, values = window.read()

    # 单独处理窗口右上角关闭事件
    if event == sg.WIN_CLOSED:
        # 直接通过控件实例获取值,不依赖values字典
        path = window['-PATH-'].get()
        filename = window['-FILENAME-'].get()
        # 此处添加写入配置文件的逻辑
        break
    # 处理EXIT按钮点击事件,此时values为有效字典
    if event == 'EXIT':
        path = values['-PATH-']
        filename = values['-FILENAME-']
        # 此处添加写入配置文件的逻辑
        break
        
    if event == '-SAVEAS-':
        codeText = values['textbox']
        completeText = textBegin + codeText +textEnd
        filename = values['-FILENAME-']
        path = values['-PATH-']
        if len(filename) == 0 or len(path) == 0:
            errorPopup('Filename or Path empty! Go to SETTINGS-TAB!')
        else:
            try:
                destination = path + filename
                file1 = open(destination, 'w')
                file1.write(completeText)
                file1.close()
            except:
                errorPopup("Invalid Path! Change Settings")
 
window.close()

方案2:统一通过控件实例取值

无论触发哪种关闭事件,都直接从窗口的控件实例中读取值,完全规避values为空的问题:

if event == 'EXIT' or event == sg.WIN_CLOSED:
    # 直接调用控件的get方法取值,不受values是否为空影响
    save_path = window['-PATH-'].get()
    save_filename = window['-FILENAME-'].get()
    # 此处添加写入配置文件的逻辑
    break
优化建议
  • 拼接路径和文件名时建议使用os.path.join(save_path, save_filename),避免不同操作系统路径分隔符不兼容的问题。
  • 写文件操作建议使用with语法,自动处理文件资源关闭,避免异常场景下的资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:48:04