首页 > 解决方案 > 是否可以在 wx.ComboBox 下显示 dict.values() 但将 dict.keys() 传输到 Bind 事件?

问题描述

我正在开发基于 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']

并在组合框下拉列表下显示这些值。由于初始部分的值对于进一步的工作至关重要 - 基于部分名称,configparser 获取部分的选项,我如何发送原始值而不是格式化的值,但仍然在下拉列表下显示格式化的值?

提前感谢您的任何投入!

标签: python-3.xcomboboxwxpythonwxwidgets

解决方案


wxComboBox支持将所谓的“客户端数据”与其每个项目相关联,因此您可以使用它并将部分值存储为此客户端数据,然后只要您有组合框项目的索引,您就可以将它们取回。

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

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


推荐阅读