【问题标题】:Is it possible to display dict.values() under the wx.ComboBox but transmit dict.keys() to Bind event?是否可以在 wx.ComboBox 下显示 dict.values() 但将 dict.keys() 传输到 Bind 事件?
【发布时间】:2019-11-17 18:58:18
【问题描述】:

我正在开发基于 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 获取部分的选项,我如何发送原始值而不是格式化的值,但仍然在下拉列表下显示格式化的值?

提前感谢您的任何意见!

【问题讨论】:

  • ini 文件中的部分将是唯一的,如果您开始仅使用名称的一部分,则不一定如此。确保这不会绊倒你。

标签: python-3.x combobox wxpython wxwidgets


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多