是否可以在wx.ComboBox下显示dict.values()但将dict.keys()传输到Bind事件?

时间:2019-07-08 09:24:36

标签: python-3.x combobox wxpython wxwidgets

我正在基于wxpython的GUI上工作,并且对wx.Combobox功能有以下疑问:

是否可以在下拉列表中显示dict.values()并选择显示的项目之一,但是在Bind事件中以某种方式发送dict.key到该项目?我想以用户友好的方式介绍可能的选择选项-下面的示例。

我认为字典应该有可能,但不知道如何实现。

我正在使用configparser将INI文件中的所有节解析为一个列表:

sections= ['123ABC456','123DEF456','123GHI456','123JKL456','123MNO456']

并将其分配给组合框:

self.combo_sections = wx.ComboBox(panel, choices=sections)
self.combo_sections.Bind(wx.EVT_COMBOBOX, self.on_combo_sections)

self.on_combo_sections function is parsing section's options.

我需要的是将列表项转换为可读格式:

['ABC','DEF','GHI','JKL','MNO']

并在组合框下拉列表下显示这些值。由于初始Section的值对于后续工作必不可少-基于节的名称,configparser获取section的选项,我如何发送原始值而不是格式化的值,但仍在下拉菜单下显示格式化的值?

在此先感谢您的投入!

1 个答案:

答案 0 :(得分:1)

wxComboBox支持将所谓的“客户数据”与其每个项目相关联,因此您可以使用它并将这些段的值存储为该客户数据,这样您就可以在任何时候将它们取回。组合框项目的索引。

或者,只需将自己的数组保持在组合框项目顺序中并在其中存储节-无论如何,这或多或少是内部实现“客户端数据”的方式。

使用内置客户端数据支持的主要优点是,即使向控件中添加/插入/删除了项目,它也保持同步,但是,如果组合框在创建后没有更改,则使用自己的数据结构应该更简单。