PySimpleGUI应用快捷键绑定失效:如何实现回车键关闭窗口?
解决PySimpleGUI输入框按回车无法关闭窗口的问题
你的问题根源有两个:一是误用单行输入框sg.Input却设置了多行高度参数,二是默认情况下该组件不会将回车键作为事件返回给窗口的read()方法。以下是两种可行的解决方案:
方案1:使用单行输入框并开启键盘事件返回
修改后的代码:
import PySimpleGUI as sg init_layout = [ [sg.Input('', background_color='white', border_width=0, key='-INPUT-', return_keyboard_events=True)] ] init_window = sg.Window('Enter File Name', init_layout, finalize=True) while True: event, values = init_window.read() # 匹配窗口关闭事件或回车键事件 if event in (sg.WINDOW_CLOSED, '\r', 'Return:13'): break init_window.close()
说明:给sg.Input添加return_keyboard_events=True参数后,键盘按键会作为事件返回,回车键对应的事件标识可以是'\r'或者'Return:13'。
方案2:改用多行输入框(适配你设置的高度需求)
如果确实需要多行输入区域,应该用sg.Multiline替代sg.Input,并绑定回车键事件:
import PySimpleGUI as sg init_layout = [ [sg.Multiline('', size=(None,5), background_color='white', border_width=0, key='-MULTILINE-')] ] init_window = sg.Window('Enter File Name', init_layout, finalize=True) # 给多行输入框绑定回车键为自定义事件 init_window['-MULTILINE-'].bind('<Return>', '_ENTER') while True: event, values = init_window.read() # 匹配窗口关闭事件或绑定的回车自定义事件 if event in (sg.WINDOW_CLOSED, '-MULTILINE-_ENTER'): break init_window.close()
说明:sg.Multiline默认按回车是换行操作,通过bind方法将回车键映射为自定义事件,就能实现按下回车直接关闭窗口的逻辑。最后记得调用close()释放窗口资源。
内容的提问来源于stack exchange,提问作者AJ gameboy
相关产品推荐
相关产品推荐

