En venant de this question, j'ai un wxComboCtrl avec une popup personnalisée faite d'un panneau avec un tas de boutons radio. Mon problème est que lorsque j'ouvre le popup le combo n'a pas de frappes , parce que les événements sont gérés par le panneau lui-même .. Je voudrais rediriger ces KeyEvents vers le textctrl du combo, mais je ne peux pas trouver un moyen de le faire fonctionner:/
Suis-je aller dans le mauvais sens ? Dois-je gérer manuellement la valeur textctrl lorsque l'utilisateur appuie sur les touches? Je pense que ce serait un peu lourd mais .. Comme le soi-disant textctrl sait déjà comment gérer ces événements ..Réception de touches dans un fichier wx.ComboCtrl ouvert
Voici mon testcase (wxPython 2.8 sur Linux), la méthode « on_key » devrait être le coupable:
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:
J'ai trouvé ces discussions (non résolues) sur le même sujet ..
"ComboCtrl loses keyboard focus when ComboPopup is shown "
"issue using wx.ComboCtrl"
Robin Dunn est DA MAN! –