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()
我想在关闭应用程序时使用键 -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()