【发布时间】:2023-03-03 00:48:02
【问题描述】:
我有一个多选 wxListBox,我想保持至少选择列表中的一项的条件。我试过了
def OnSelectDataSource(self, event):
datasourcelist = xrc.XRCCTRL(self, "m_lstDataSource")
if not event.IsSelection():
if len(datasourcelist.GetSelections()) == 0:
datasourcelist.Select(event.GetInt())
作为wx.EVT_LISTBOX 事件的处理程序。这可行,但您可以看到该项目被取消选择然后重新选择。可能有更好的方法我不知道。
取消选择似乎发生在鼠标按下时,直到鼠标按下时才会调用事件(然后重新选择项目)。
根据建议的解决方案,我现在可以使用
xrc.XRCCTRL(self, "m_lstDataSource").Bind(wx.EVT_LEFT_DOWN, self.CheckDataSelect)
在我的__init__ 方法和
def CheckDataSelect(self, event):
lstctrl = xrc.XRCCTRL(self, "m_lstDataSource")
pos = lstctrl.HitTest(event.GetPosition())
if lstctrl.GetSelections() == (pos,):
event.Skip(False)
else:
event.Skip()
【问题讨论】: