来自这个问题,我有一个带有自定义弹出窗口的 wxComboCtrl,该弹出窗口由带有一堆单选按钮的面板组成。我的问题是,当我打开弹出窗口时,组合没有击键,因为事件由面板本身处理..我想将这些KeyEvents重定向到组合的textctrl,但我找不到让它工作的方法:/
我走错路了吗?我应该在用户按键时手动处理 textctrl 值吗?我认为这会有点麻烦.. 因为据说 textctrl 已经知道如何处理这些事件..
这是我的测试用例(Linux 上的 wxPython 2.8),“on_key”方法应该是罪魁祸首:
import wx
import wx.combo
class CustomPopup(wx.combo.ComboPopup):
def Create(self, parent):
# Create the popup with a bunch of radiobuttons
self.panel = wx.Panel(parent)
sizer = wx.GridSizer(cols=2)
for x in range(10):
r = wx.RadioButton(self.panel, label="Element "+str(x))
r.Bind(wx.EVT_RADIOBUTTON, self.on_selection)
sizer.Add(r)
self.panel.SetSizer(sizer)
# Handle keyevents
self.panel.Bind(wx.EVT_KEY_UP, self.on_key)
def GetControl(self):
return self.panel
def GetAdjustedSize(self, minWidth, prefHeight, maxHeight):
return wx.Size(200, 150)
def on_key(self, evt):
if evt.GetEventObject() is self.panel:
# Trying to redirect the key event to the combo.. But this always returns false :(
print self.GetCombo().GetTextCtrl().GetEventHandler().ProcessEvent(evt)
evt.Skip()
def on_selection(self, evt):
self.Dismiss()
wx.MessageBox("Selection made")
class CustomFrame(wx.Frame):
def __init__(self):
# Toolbar-shaped frame with a ComboCtrl
wx.Frame.__init__(self, None, -1, "Test", size=(800,50))
combo = wx.combo.ComboCtrl(self)
popup = CustomPopup()
combo.SetPopupControl(popup)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(combo, 0)
self.SetSizer(sizer)
self.Layout()
if __name__ == '__main__':
app = wx.PySimpleApp()
CustomFrame().Show()
app.MainLoop()
编辑:
我在同一主题上发现了这些(未解决的)讨论。
“当显示 ComboPopup 时,ComboCtrl 失去键盘焦点”
“使用 wx.ComboCtrl 的问题”