Skip to main content
 首页 » 编程设计

python之如何通过发布事件设置 wx.combobox 的值

2025年05月04日7webabcd

注意:这似乎是一个特定于 OSX 的问题。

下面的代码演示了我遇到的问题。我正在创建一个 wx.ComboBox 并试图通过发布一个 wxEVT_COMMAND_COMBOBOX_SELECTED 事件来模仿它的功能以用于测试目的......这个事件奇怪地适用于 wx.Choice,但它对 ComboBox 没有任何作用。

似乎没有其他事件可以发布到组合框,但也许我遗漏了什么。

我在 Mac OSX 10.5.8 上的 Python 2.5 上运行这段代码

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 的处理程序以查看那里捕获的事件类型,并且我得到了与 wxEVT_COMMAND_COMBOBOX_SELECTED 匹配的 id 10016 ... 所以生成此命令事件当然应该导致 ComboBox 更新。

请您参考如下方法:

这似乎是 OSX 的一个特定错误。 这两种选择在 windowsXP 中都能完美运行。