如何在PySimpleGUI中实现点击表格行直接触发事件
解决方法
你只需要给sg.Table组件添加enable_events=True参数即可实现点击行直接触发事件,无需额外按钮。
修改后的布局代码如下:
layout = [[sg.Table(values=df.values.tolist(), headings=df.columns.tolist(), max_col_width=25, auto_size_columns=True, justification='right', num_rows=min(len(df), 20), # 新增两个配置:开启事件、设置组件key enable_events=True, key='_TABLE_')]]
事件处理逻辑
在你的事件循环中,直接监听Table组件的key对应的事件即可,选中的行索引可以通过values['_TABLE_']获取,示例事件循环代码如下:
window = sg.Window('表格点击示例', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED: break # 监听表格点击事件 if event == '_TABLE_': # 获取选中的行索引列表(支持多选,单选的话取第一个元素即可) selected_rows = values['_TABLE_'] if selected_rows: # 取第一个选中行的索引 row_idx = selected_rows[0] # 拿到选中行的具体数据 row_data = df.values.tolist()[row_idx] # 这里写你原来点击按钮后要执行的逻辑即可 print(f"你选中了第{row_idx+1}行,数据为:{row_data}") window.close()
补充说明
- 如果你的表格开启了多选模式,
values['_TABLE_']会返回所有选中行的索引列表,你可以根据需求遍历处理 - 要是想要区分单击、双击事件,可以额外给Table添加
bind('<Double-Button-1>', '+DOUBLE_CLICK+'),事件循环中监听_TABLE_+DOUBLE_CLICK+事件即可处理双击逻辑
内容的提问来源于stack exchange,提问作者Keith Wynroe
相关产品推荐
相关产品推荐

