当前位置: 首页 > news >正文

PySimpleGUI 如何设置事件的监听器

在 PySimpleGUI 中,事件的监听主要通过 window.read() 方法结合事件循环实现。以下是详细说明和示例:


1. 基本事件监听流程

PySimpleGUI 的事件监听基于 事件驱动模型,核心步骤如下:

  1. 创建窗口和控件,为需要监听的控件设置 keyenable_events=True(如输入框、按钮等)。
  2. 进入事件循环,通过 window.read() 获取事件和控件值。
  3. 判断事件类型(如按钮点击、输入框变化等),执行对应逻辑。
  4. 关闭窗口(如用户点击关闭按钮)。

示例代码

import PySimpleGUI as sg# 1. 定义布局(设置 key 和 enable_events)
layout = [[sg.Input(key='-INPUT-', enable_events=True)],  # 监听输入变化[sg.Button('提交', key='-SUBMIT-')],           # 按钮点击默认触发事件[sg.Text('', key='-OUTPUT-')]                  # 显示结果
]# 2. 创建窗口
window = sg.Window('事件监听示例', layout)# 3. 事件循环
while True:event, values = window.read()  # 阻塞,等待用户操作# 4. 判断事件类型if event == sg.WIN_CLOSED:     # 关闭窗口事件breakelif event == '-INPUT-':       # 输入框内容变化window['-OUTPUT-'].update(f"输入内容: {values['-INPUT-']}")elif event == '-SUBMIT-':      # 按钮点击window['-OUTPUT-'].update(f"提交内容: {values['-INPUT-']}")# 5. 关闭窗口
window.close()

2. 不同控件的事件监听

(1) 按钮(Button)

  • 默认行为:按钮点击会自动触发事件,无需 enable_events=True
  • 示例
    if event == '-BUTTON_KEY-':print("按钮被点击!")
    

(2) 输入框(Input)

  • 需设置 enable_events=True 才能监听输入变化。
  • 示例
    layout = [sg.Input(key='-INPUT-', enable_events=True)]
    if event == '-INPUT-':print(f"输入内容: {values['-INPUT-']}")
    

(3) 下拉菜单(Combo)

  • 监听选项变化
    layout = [sg.Combo(['A', 'B', 'C'], key='-COMBO-', enable_events=True)]
    if event == '-COMBO-':print(f"选择: {values['-COMBO-']}")
    

(4) 复选框(Checkbox)

  • 监听勾选状态变化
    layout = [sg.Checkbox('同意', key='-CHECK-', enable_events=True)]
    if event == '-CHECK-':print(f"勾选状态: {values['-CHECK-']}")
    

(5) 列表框(Listbox)

  • 监听选中项变化
    layout = [sg.Listbox(['1', '2', '3'], key='-LIST-', enable_events=True)]
    if event == '-LIST-':print(f"选中: {values['-LIST-']}")
    

3. 高级事件监听技巧

(1) 超时监听

window.read(timeout=1000) 可设置超时(毫秒),超时后返回 timeout 事件:

event, values = window.read(timeout=1000)
if event == 'timeout':print("1秒内无操作")

(2) 绑定快捷键

通过 bind_return_key=True 让输入框按回车键触发事件:

sg.Input(key='-INPUT-', enable_events=True, bind_return_key=True)

(3) 自定义事件

通过 window.write_event_value() 手动触发事件:

window.write_event_value('-CUSTOM-', '自定义数据')  # 触发自定义事件
if event == '-CUSTOM-':print(f"收到自定义事件: {values[event]}")

4. 完整示例:多控件监听

import PySimpleGUI as sglayout = [[sg.Text("输入框监听:"), sg.Input(key='-INPUT-', enable_events=True)],[sg.Text("下拉菜单:"), sg.Combo(['A', 'B', 'C'], key='-COMBO-', enable_events=True)],[sg.Button('提交'), sg.Button('退出')],[sg.Multiline(key='-LOG-', size=(40, 10))]
]window = sg.Window("多控件监听", layout)while True:event, values = window.read()if event in (sg.WIN_CLOSED, '退出'):breakelif event == '-INPUT-':window['-LOG-'].print(f"输入: {values['-INPUT-']}")elif event == '-COMBO-':window['-LOG-'].print(f"选择: {values['-COMBO-']}")elif event == '提交':window['-LOG-'].print(f"提交内容: {values['-INPUT-']}")window.close()

5. 总结

功能 方法
基本监听 event, values = window.read() + if event == 'key'
控件事件 设置 enable_events=True(如输入框、下拉菜单)
按钮监听 默认支持,无需额外设置
超时监听 window.read(timeout=ms)
自定义事件 window.write_event_value('-KEY-', data)

通过合理使用这些方法,可以灵活实现 PySimpleGUI 的事件监听逻辑。

http://www.rkmt.cn/news/61624.html

相关文章:

  • 2025 年 11 月中央空调租赁厂家权威推荐榜:大型中央空调/厂房空调/商场写字楼空调/工业大功率空调,专业租赁服务与高效节能解决方案精选
  • Claude-cursor 同步各种数据
  • 2025 十大手板厂家推荐:技术融合赋能研发新效率
  • 使用Maven导入Junit5依赖时的注意事项
  • WireShark抓包http,解密https - 教程
  • 基于Xilinx FPGA的三目摄像头AR0135的图像采集与LCD/HDMI/USB显示
  • 2025智能仓储生产企业排名推荐:聚焦行业前沿,青岛茂源引领智造新趋势
  • 初始Spring框架
  • 2025 年 11 月供应链管理咨询服务权威推荐榜:高效协同与降本增效的智慧解决方案,助力企业优化全链路运营
  • 【JPCS出版 | 连续多年EI稳定检索】第九届力学、数学与应用物理学国际学术会议(ICMMAP 2025)
  • 2025 年恒温恒湿系统厂家最新推荐榜:技术实力与市场口碑深度解析,覆盖多行业适配需求实验室恒温恒湿系统/车间恒温恒湿系统/仓库恒温恒湿系统/厂房恒温恒湿系统/空调恒温恒湿系统公司推荐
  • 2025年11月合肥刑事律师推荐榜:十大专业律师权威评测与选择指南
  • flask: 获取接收到的所有post参数
  • 2025年11月合肥刑事律师推荐榜单:专业律师综合对比与选择指南
  • 2025年11月山姆好吃食品推荐榜:五款热门零食综合对比与选购
  • 2025 年铝艺门厂家最新推荐榜,技术创新与品质服务双驱动的优质品牌深度解析铝艺大门/铸铝门公司推荐
  • 2025 年 11 月企业运营管理咨询公司 TOP10 权威推荐榜:战略规划、流程优化与组织效能提升的顶尖智囊深度解析
  • 获取路径
  • 2025 年填充机厂家最新推荐榜,技术创新与品质口碑双重验证的标杆品牌胶囊填充机/自动胶囊填充机公司推荐
  • 2025 年焚烧炉测试厂家最新推荐榜:技术实力与市场口碑深度解析,兼具专业性与合规性的优质品牌焚烧炉测试/测试焚烧炉/焚烧炉去除率/焚烧炉处理设施性能测试/焚烧炉水泥窑测试公司推荐
  • 杂记2025-11-24
  • 2025年深圳旧房改造公司推荐榜
  • 2025年河北叛逆行为矫正学校权威推荐榜单:青少年叛逆教育‌/叛逆期管教‌/叛逆少年学校精选
  • NOIP 集训 day4 图论 2
  • django启动,允许全部ip访问
  • 活动预告|本周六!IvorySQL 邀您相聚第八届中国 PostgreSQL 数据库生态大会
  • 突破成绩限制:后保研如何助力不同排名学生实现院校跃升?
  • 年会策划公司哪家性价比高?这十大策划公司按需选配不花冤枉钱!
  • 2025 年 11 月棒球帽品牌实力推荐榜:涵盖薄款/厚款/男款/女款/可水洗/复古款/潮流款/运动款,精选百搭设计与舒适面料之选
  • Docker安装(基于云服务器ECS实例 CentOS 7.9系统) - 教程