PySimpleGUI弹窗按钮在触摸屏上无法点击的问题求助
PySimpleGUI弹窗触摸失效问题的原因与解决方法
问题原因
- PySimpleGUI自带的
popup_yes_no、popup_ok等默认弹窗采用简化的窗口创建逻辑,未继承主窗口的触摸屏适配参数,导致触摸事件无法被弹窗按钮正确识别。 - 部分触摸屏环境(尤其是嵌入式设备)中,系统对顶层弹窗的触摸事件传递有特殊限制,默认弹窗的事件处理机制未适配这类场景。
解决方案
1. 自定义弹窗替代默认弹窗
放弃使用PySimpleGUI自带的弹窗函数,手动创建sg.Window作为弹窗,完全控制窗口配置,确保触摸响应正常。
替换原popup_yes_no的示例代码:
def custom_yes_no_popup(message, font=('Helvetica', 14)): layout = [ [sg.Text(message, font=font)], [sg.Button('Yes', font=font, size=(8, 2)), sg.Button('No', font=font, size=(8, 2))] ] # 创建弹窗时启用置顶,若主窗口有触摸屏专属配置可同步添加 window = sg.Window('', layout, keep_on_top=True, finalize=True) # 部分PySimpleGUI版本支持直接设置触摸屏属性 # window.touchscreen = True event, _ = window.read() window.close() return event # 调用自定义弹窗替代原sg.popup_yes_no popup_result = custom_yes_no_popup(message)
替换原popup_ok的示例代码:
def custom_ok_popup(message, font=('Helvetica', 14)): layout = [ [sg.Text(message, font=font)], [sg.Button('OK', font=font, size=(8, 2))] ] window = sg.Window('Alert', layout, keep_on_top=True, finalize=True) window.read() window.close() # 替换原sg.popup_ok调用 custom_ok_popup("Please Select Hardware Before Finishing")
2. 修改默认弹窗的触摸属性
利用return_window=True参数获取弹窗对象,手动开启触摸屏支持(依赖PySimpleGUI版本):
# 改造sg.popup_ok调用 popup_window = sg.popup_ok( "Please Select Hardware Before Finishing", title="Alert", font=('Helvetica', 14), keep_on_top=True, return_window=True ) popup_window.touchscreen = True popup_window.read() popup_window.close()
3. 排查系统层面问题
- 验证触摸屏驱动是否正常:测试其他GUI程序的弹窗触摸响应,排除硬件或系统驱动故障。
- 调整窗口管理器规则:若运行在嵌入式Linux系统,检查窗口管理器是否限制了顶层弹窗的触摸事件传递,必要时修改配置。
内容的提问来源于stack exchange,提问作者Taylor Fettig
相关产品推荐
相关产品推荐

