2014-01-25 4 views
0

Я инициализировать wx.ListBox так:Событие срабатывает при выборе пункта ListBox

mylistbox = wx.ListBox(self, style=wx.LB_SINGLE) 
mylistbox.Bind(wx.EVT_LISTBOX, self.OnEventListBox) 
# some other things (append some items to the list) 
mylistbox.SetSelection(5) 

У меня также есть:

def OnEventListBox(self, event): 
    print 'hello' 
    # plus lots of other things 

Как сделать, чтобы команда mylistbox.SetSelection(5) в инициализации сразу же следует звонок OnEventListBox?

Примечание: Кажется, что SetSelection() не создает wx.EVT_LISTBOX автоматически.

ответ

1

От the documentation:

Обратите внимание, что [SetSelection] не вызывает какие-либо командные события, издаваемые ...

Это нарочно, так что события не весь триггер в то время как вы пытаетесь настроить пользовательский интерфейс. Вы можете просто вручную вызвать OnEventListBox для желаемой функциональности.

еще лучше, если вам не нужно это событие для того, что вы делаете на INIT, вы могли бы извлечь инициализацию в отдельную функцию, а затем вызвать, что INIT и в OnEventListBox.

+0

Конечно, я мог бы вручную называть себя 'OnEventListBox', но с каким параметром' event'? Я не могу создать себе «событие», потому что я действительно не нажимаю на список ... Или, еще одно решение, я мог бы создать еще одну функцию, которая почти копирует/вставляет «OnEventListBox», только для целей инициализация. Это не очень красиво, поэтому я спросил, есть ли другое решение ... – Basj

+2

Если вам не нужно событие за то, что вы делаете, вы можете извлечь инициализацию в отдельную функцию, а затем вызвать *, что * в init и в 'OnEventListBox'. – jonrsharpe

+0

комментарий @jonrsharpe выше - это правильный ответ, я бы рекомендовал вам отредактировать исходный ответ, чтобы упомянуть, что это правильный подход для выполнения некоторого кода как для изменений, выполненных пользователем, так и самой программой. –

Смежные вопросы