首页 > 解决方案 > PysimpleGUI 无法读取 sg.WIN_CLOSED 事件中的 inputFields

问题描述

我想在关闭应用程序时使用 -PATH- 和 -FILENAME- 键从输入字段中保存路径和文件名,因此如果我更改文件名和路径,它将保存在文本文件中并在下一个加载开始。但是,当我尝试在 sg.WIN_CLOSED 事件中读取 inputText '-FILENAME-' 时,我得到 'NoneType' object is not subscribable TypeError,但如果我使用相同的方式 x = values['-FILENAME-'] 在 -另存为-事件它工作得很好并在控制台中打印文件名

任何帮助表示赞赏!

#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()

标签: pythonpysimplegui

解决方案


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

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

enable_close_attempted_event=True如果你想在窗口关闭之前做一些事情,尝试使用选项sg.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()

推荐阅读