Сохранение хотя бы одного элемента в wxListBox - PullRequest
2 голосов
/ 24 февраля 2011

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

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Захватите событие мыши и проверьте, не приведет ли это к выбору. Если это так, вызовите event.skip (), чтобы другие обработчики не касались вашего выбора.

http://www.wxpython.org/docs/api/wx.Event-class.html#Skip

0 голосов
/ 25 февраля 2011

Чтобы предотвратить видимость изменений во время выполнения:

wxWindow :: Замораживание виртуальная пустота Freeze ()

Замораживает окно или, другими словами, предотвращает какие-либо обновления на экране, окно вообще не перерисовывается. Оттепель должна быть вызвана для перерисовки окна. Вызовы этих двух функций могут быть вложенными.

Этот метод полезен для оптимизации визуального оформления (например, рекомендуется использовать его перед выполнением большого количества вставок большого количества текста в строку в wxTextCtrl под wxGTK), но он не реализован на всех платформах и не для всех элементов управления, поэтому это в основном просто подсказка для wxWidgets, а не обязательная директива.

...