Исходя из этого вопроса , у меня есть wxComboCtrl с пользовательским всплывающим окном, сделанным из панели с кучей радиокнопок. Моя проблема в том, что когда я открываю всплывающее окно, комбо не получает нажатия клавиш, потому что события обрабатываются самой панелью .. Я бы хотел перенаправить эти KeyEvents в textctrl комбо, но я не могу найти способ заставить его работать: /
Я иду неправильным путем? Должен ли я вручную обрабатывать значение textctrl, когда пользователь нажимает клавиши? Я думаю, что это было бы немного громоздко, хотя ... Так как предположительно textctrl уже знает, как обрабатывать эти события ..
Вот мой тестовый пример (wxPython 2.8 в Linux), виновником должен быть метод "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()
Edit:
Я нашел эти (неразрешенные) обсуждения на ту же тему ..
«ComboCtrl теряет фокус клавиатуры, когда отображается ComboPopup»
"проблема с использованием wx.ComboCtrl"