У меня есть множественный выбор 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()