【问题标题】:wxPython -- differentiating between two identical widgetswxPython——区分两个相同的小部件
【发布时间】:2010-02-19 14:21:59
【问题描述】:

大家好,

我有一个 wxPython 项目(使用 wxFormBuilder 创建),它包含两个面板,每个面板都包含一个 wxListCtrl。加载列表控件时,每个控件都可以显示不同的列。由于列表包含在面板中,它们都具有相同的 ID,并且相同的例程用于列表的填充例程。

我需要在运行时确定正在填充哪个列表,以便检索适当的配置数据。如果我使用 list.GetID() 我保证每次运行时这些值都相同吗?也就是说,我可以安全地根据 GetID() 值保存配置详细信息,以便下次运行时它会做正确/相同的事情吗?

有没有更好、更智能、更简单的方法让我无法理解?

谢谢!

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    我认为没有任何保证 GetID() 将始终如一地运行。

    您可以在创建每个列表后为其分配您自己的 ID 吗?比如:

    listctrl.myID = 5
    

    另一个想法是,如果子 ID 不是唯一的,也许您可​​以使用 GetParent() 并构建父 ID 和列表 ID 的元组,然后这个元组将是唯一的。

    即使分配的 ID 不是唯一的,Python ID 也会是。

    【讨论】:

    • 好吧,我可以遍历属于一个框架的所有面板,并为它们分配一个计数器值。还是会冒犯众神?
    • 老实说,我不太了解这个问题,无法准确地说出你是如何做到这一点的。具体来说,当你想知道ID的时候,你从什么开始?
    • 也许如果你发布一个小例子,我可以找出问题所在。例如,为什么不为每个列表捕获 EVT_LIST_INSERT_ITEM?
    • 假设我有一个方法:def populateList(list): cols = get_list_columns(list) 用于我的框架中的任何列表,并且每个列表都可以不同。这可以在任何伴随控件发生更改时调用,但只会有一个“自我”引用。我想查找哪些列可用于特定列表(列表 A、列表 B、列表 C 等)。因此,我需要一种唯一标识它们的方法,以便我可以提取正确的配置数据。顺便说一句:wxFrame.GetChildren() 返回一个没有记录的 wxWindowList——对任何人有帮助吗?
    • 如果您想为不同的列表使用不同的填充方法,那么您可以将该方法设置为属性,例如 listA.pop_method = population_method_A,并且在您的处理程序中,您不需要知道它是 listA ,因为当您调用 listctrl.pop_method() 时,它会调用您设置的那个。另外,你可以使用 functools.partial 是功能相似但只是需要不同的参数,或者类方法等。
    【解决方案2】:

    您能否为 name 属性赋予不同的值,然后在需要引用其中一个或另一个时使用 FindWindowByName

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 2023-03-18
      • 2011-04-15
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2017-06-22
      • 2018-12-02
      • 2010-09-15
      相关资源
      最近更新 更多