2010-04-21 5 views
2

ПРИМЕЧАНИЕ: Это, как представляется, проблема с OSX.Как установить значение wx.combobox путем размещения события

Приведенный ниже код демонстрирует проблему, с которой сталкиваюсь. Я создаю wx.ComboBox и пытаюсь имитировать его функциональность для целей тестирования, отправив событие wxEVT_COMMAND_COMBOBOX_SELECTED ... это событие странно отлично работает для wx.Choice, но оно ничего не делает для ComboBox.

Не может быть другого события, которое я могу опубликовать в выпадающем списке, но, возможно, мне что-то не хватает.

Я бег этого кода на Python 2.5 на Mac OSX 10.5.8

import wx 

app = wx.PySimpleApp() 

def on_btn(evt): 
    event = wx.CommandEvent(wx.wxEVT_COMMAND_COMBOBOX_SELECTED,combobox.Id) 
    event.SetEventObject(combobox) 
    event.SetInt(1) 
    event.SetString('bar') 
    combobox.Command(event) 
    app.ProcessPendingEvents() 


frame = wx.Frame(None) 
panel = wx.Panel(frame, -1) 
# This doesn't work 
combobox = wx.ComboBox(panel, -1, choices=['foo','bar']) 
# This works 
#combobox = wx.Choice(panel, -1, choices=['foo','bar']) 
combobox.SetSelection(0) 
btn = wx.Button(panel, -1, 'asdf') 
btn.Bind(wx.EVT_BUTTON, on_btn) 
sz = wx.BoxSizer() 
sz.Add(combobox) 
sz.Add(btn) 
panel.SetSizer(sz) 
frame.Show() 

app.MainLoop() 

UPDATE: Я подключил выпадающий в обработчик wx.EVT_COMBOBOX, чтобы увидеть, какое событие типа бытия и я получил идентификатор 10016, который соответствует wxEVT_COMMAND_COMBOBOX_SELECTED ... поэтому генерация этого командного события, конечно, ДОЛЖНА привести к обновлению ComboBox.

ответ

1

Это, кажется, конкретная ошибка от OSX. Оба варианта работают отлично в windowsXP.

+0

Я так понял, так как это работает на наших системах окон. –

0

Я думаю, что это исправляет или, по крайней мере, указывает путь к более полному исправлению.

Редактировать: вы можете использовать PyCommandEvent, если хотите, а также использовать SetInt и SetString для размещения дополнительной информации в событии, если это необходимо. Но, насколько я могу судить, необходимо также установить выделение со списком.

import wx 

app = wx.PySimpleApp() 

def on_btn(evt): 
    combobox.Selection=1 
    wx.PostEvent(combobox, wx.CommandEvent(wx.wxEVT_COMMAND_COMBOBOX_SELECTED)) 
    print "foo" 

def on_select(evt): 
    print "selected", combobox.Selection 

frame = wx.Frame(None) 
panel = wx.Panel(frame, -1) 
# This doesn't work 
combobox = wx.ComboBox(panel, -1, choices=['foo','bar']) 
# This works 
# combobox = wx.Choice(panel, -1, choices=['foo','bar']) 
combobox.SetSelection(0) 
btn = wx.Button(panel, -1, 'asdf') 
btn.Bind(wx.EVT_BUTTON, on_btn) 
combobox.Bind(wx.EVT_COMBOBOX, on_select) 
sz = wx.BoxSizer() 
sz.Add(combobox) 
sz.Add(btn) 
panel.SetSizer(sz) 
frame.Show() 

app.MainLoop() 
Смежные вопросы