我如何处理 wxpython EditableListBox 中的项目选择事件?

How do I handle an item selection event in wxpython EditableListBox?

我在 wxpython 应用程序中有一个 EditableListBox。我希望每当用户单击框中的项目时触发一个事件。我可以将函数绑定到 EVT_LIST_ITEM_SELECTED,但这似乎以一种非常奇怪的方式破坏了列表框中的编辑按钮。向上箭头被禁用并且不执行任何操作,向下箭头仅将第一个交换到列表中的项目,无论我选择了什么。这是一个显示行为的小例子:

import wx
import wx.gizmos

class MyApp(wx.App):
    def OnInit(self):
        frame = wx.Frame(None, -1, "Hello")

        self.gui_list = wx.gizmos.EditableListBox(frame, wx.ID_ANY, 'Listbox Name', style=wx.gizmos.EL_ALLOW_DELETE)

        self.gui_list.Strings = ["one","two","red","blue"]

        self.text = wx.StaticText(frame, wx.ID_ANY, "Text Here")

        self.gui_list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.change_text)

        self.gui_list.Show(True)
        self.text.Show(True)
        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(self.gui_list)
        box.Add(self.text)
        frame.SetSizer(box)
        frame.Layout()
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

    def change_text(self, event):
        self.text.SetLabel(event.GetText())

app = MyApp(0)
app.MainLoop()

我不知道这里发生了什么。有没有办法在不破坏 EditableListBox 中的编辑按钮的情况下捕获点击事件?

当派生自标准控件的控件出现问题时,尝试停用自定义绑定始终是个好主意(因为它们可能会覆盖底层控件的某些事件处理程序)。

取消注释绑定到 change_text 的行时,控件行为正常。在这种情况下,它有助于跳过事件以允许控件本身对 wx.EVT_LIST_ITEM_SELECTED 事件做出反应。

def change_text(self, event):
    self.text.SetLabel(event.GetText())
    # skip event to allow further processing of event
    event.Skip()