当使用 PySimpleGUI 中以前未使用过的元素时,查看项目提供的一些材料会很有帮助。
一是演示程序。这些旨在让您快速开始使用功能。另一个是调用参考文档。您可以通过文档字符串访问相同的信息(使用 PyCharm 时按 Control+Q)。
我不知道表格元素触发了任何事件
如果一个元素能够生成事件但默认情况下不这样做(如按钮或菜单),那么您将找到一个参数enable_events
.
对于 Table 元素,您会发现文档字符串(因此调用引用也)具有 table 元素的参数:
enable_events – 打开元素特定事件。单击行时发生表事件
在您的示例中,您需要做的就是将此参数添加到布局中的表中。
[sg.Table(values=data_values, headings=data_headings,
max_col_width=65,
col_widths=data_cols_width,
auto_size_columns=False,
justification='left',
enable_events=True,
num_rows=6, key='_filestable_')],
EDIT:
我喜欢提供有启发性的答案how去解决问题,而不是只是脱口而出答案。这不仅会在这种情况下对您有所帮助,而且在使用 PySimpleGUI 包时也会对其他情况有所帮助。
让我们更深入地了解表的值条目是如何工作的。
表的值字典中的条目是所选行的列表。
如果您看到如下结构,请务必小心:
data_values[values['_filestable_']]
因为它不会运行。它会崩溃。
这些值不能用于直接在源表中查找值。尝试这样做会产生一个错误,即列表索引必须是整数或切片。
由于在此示例中已为表启用了事件,因此您可以在事件循环中检查该事件并适当地处理该事件:
if event == '_filestable_':
data_selected = [data_values[row] for row in values[event]]
data_selected 将是原始数据行的列表。
如果您希望限制用户一次只能选择 1 行,那么您可以设置select_mode
创建表时的参数。
select_mode=sg.TABLE_SELECT_MODE_BROWSE
浏览将允许单行而不是默认的多行。通过设置 BROWSE 的选择模式,您可以假定您的data_selected
列表只有 1 个条目,因此data_selected[0]
将是该条目。或者你可以使用data_selected[0]
仅选择第一行。
最后一句话...
PySimpleGUI 文档有一个关于支持的部分,首先解释不建议使用诸如 SO 之类的网站。建议出于多种原因避免这些,包括基本缺乏知识。对于几乎所有活跃的 GitHub 项目,向该项目提交问题往往会提供高质量的答案。大多数开发人员都希望提供帮助,并希望了解可能意味着文档不清楚的问题或常见问题。
祝你的计划顺利!希望一切顺利。