== Problem == I want to generate an wxEVT_COMMAND_LISTBOX_SELECT event by hand. === Context === I am using wxPython on Debian Gnu/Linux (unstable). The relevant packages are: * libwxgtk2.5-python version 2.5.3.1 * wxwin2.5-examples version 2.5.3.1 The documentation that I refer to below is part of the libwxgtk2.5-python package and lives in my computer on /usr/share/doc/wxwin2.5-doc/wxWindows-manual.html/. == My path to the solution (and some problems left behind) == My documentation does not say that wxL''''''istBox inherits from wxControl, but it does (or it appears to). This appears to be a '''documentation bug'''. So, the method wxL''''''istBox.Command exists. The docs on wxControl say that wxControl::wxCommand is like {{{ void Command(wxCommandEvent& event) }}} The next problem is to generate an wxC''''''ommandEvent instance. The docs say that the constructor of wxC''''''ommandEvent is like {{{ wxCommandEvent(WXTYPE commandEventType = 0, int id = 0) }}} To retrieve the EventType for an event type ;) you can do : yourPyEventBinder.evtType[0] == The solution == All of the above put together, the line that produces an EVT_LISTBOX event is: {{{ self.Command(wx.wxCommandEvent(wx.EVT_LISTBOX.evtType[0], self.GetId())) }}} where self is the wxL''''''istBox instance. == To do == * Make documentation patches. * Update this recipe with the [[http://lists.wxwindows.org/cgi-bin/ezmlm-cgi?11:mss:18267:200304:adlmdckdlikibbelbelj|info present in the wxPython-users mailing list]]. == Example == This example demonstrates a simple window with a button, combo box, and text field. Pushing the button creates a CommandEvent and tells the combo box to process it. The event contains client data, as well. {{{ import wx class TestPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) btn = wx.Button(self, label="create event") btn.Bind(wx.EVT_BUTTON, self.OnButton) self.CB = wx.ComboBox(self, style=wx.CB_READONLY) self.CB.Append('one', '1') self.CB.Append('two', '2') self.CB.Bind(wx.EVT_COMBOBOX, self.OnCombo) self.text= wx.TextCtrl(self, style=wx.TE_READONLY) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(btn, 0, wx.ALL, 10) sizer.Add(self.CB, 0, wx.LEFT | wx.RIGHT , 10) sizer.Add(self.text, 0, wx.ALL, 10) self.SetSizerAndFit(sizer) def OnButton(self, event): e = wx.CommandEvent(wx.EVT_COMBOBOX.evtType[0], self.CB.GetId() ) e.SetString('three') e.SetClientData('3') self.CB.Command(e) def OnCombo(self,event): self.text.SetValue("%s %s" % (event.GetString(), event.GetClientData())) class TestFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent) sizer = wx.BoxSizer(wx.VERTICAL) self.NB = TestPanel(self) sizer.Add(self.NB, 1, wx.EXPAND | wx.GROW) self.SetSizerAndFit(sizer) self.Layout() from wx.lib.mixins.inspection import InspectionMixin class App(wx.App, InspectionMixin): def OnInit(self): self.Init() frame = TestFrame(None) self.SetTopWindow(frame) frame.Show(True) return True app = App(0) app.MainLoop() app.Destroy() }}} The only problem with this code is the generated event won't change the value in the combo box.