Как установить значение wx.combobox, опубликовав событие - PullRequest
2 голосов
/ 21 апреля 2010

ПРИМЕЧАНИЕ: Похоже, это проблема, специфичная для OSX.

Приведенный ниже код демонстрирует проблему, с которой я сталкиваюсь.Я создаю 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()

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

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

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

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

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

Редактировать: вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...