我如何处理 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()
我在 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()