PysimpleGUI 无法读取 sg.WIN_CLOSED 事件中的 inputFields

PysimpleGUI can't read inputFields in the sg.WIN_CLOSED event

我想在关闭应用程序时使用键 -PATH- 和 -FILENAME- 保存输入字段中的路径和文件名,这样如果我更改文件名和路径,它将保存在文本文件中并在下次启动时加载。但是,当我尝试在 sg.WIN_CLOSED 事件中读取 inputText '-FILENAME-' 时,我得到 'NoneType' object is not subscribable TypeError,但是如果我使用相同的方式 x = values['-FILENAME-' ] 在 -SAVE AS- 事件中它工作正常并在控制台中打印文件名

感谢任何帮助!

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

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

    if event == 'EXIT' or event == sg.WIN_CLOSED:
        print(values['-PATH-'])
        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()

您的代码太长,无法阅读。

当单击事件 window 关闭按钮时,它被定义为销毁 window,您可能或不会从那个 window 中得到任何东西。大多数时候,values 的值将是 None,因此您无法从中读取 sg.Input 元素的内容。

尝试在sg.Window中使用选项enable_close_attempted_event=True,如果你想在window关闭之前做一些事情,那么它不会先破坏window。

演示代码如下,

import PySimpleGUI as sg

sg.theme("DarkBlue3")
font = ('Arial', 10)

defaultPath     = "Here's your default path"
defaultFilename = "Here's your default filanme"

layout = [
    [sg.Text('Path:',     size=(10,1)), sg.InputText(defaultPath,     key='-PATH-')],
    [sg.Text('Filename:', size=(10,1)), sg.InputText(defaultFilename, key='-FILENAME-')]
]

window = sg.Window('Test1', layout, resizable=True, finalize=True, enable_close_attempted_event=True)

while True:

    event, values = window.read()
    if event == sg.WINDOW_CLOSE_ATTEMPTED_EVENT:
        print(values['-PATH-'])
        print(values['-FILENAME-'])
        break

window.close()