J'ai un peu de mal avec un panneau qui a deux TextCtrls wxPython. Je veux un gestionnaire EVT_CHAR ou EVT_KEY_UP lié aux deux contrôles, et je veux être capable de dire quel TextCtrl a généré l'événement. Je pense que event.Id me le dirait, mais dans l'exemple de code suivant c'est toujours 0. Des pensées? Je n'ai testé ceci sur OS X.Utiliser le même gestionnaire pour plusieurs wx.TextCtrls?
Ce code vérifie simplement que les deux ont TextCtrls un texte en eux avant d'activer le bouton Terminé
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, ID, title):
wx.Frame.__init__(self, parent, ID, title,
wx.DefaultPosition, wx.Size(200, 150))
self.panel = BaseNameEntryPanel(self)
class BaseNameEntryPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.entry = wx.TextCtrl(self, wx.NewId())
self.entry2 = wx.TextCtrl(self, wx.NewId())
self.donebtn = wx.Button(self, wx.NewId(), "Done")
self.donebtn.Disable()
vsizer = wx.BoxSizer(wx.VERTICAL)
vsizer.Add(self.entry, 1, wx.EXPAND|wx.GROW)
vsizer.Add(self.entry2, 1, wx.EXPAND|wx.GROW)
vsizer.Add(self.donebtn, 1, wx.EXPAND|wx.GROW)
self.SetSizer(vsizer)
self.Fit()
self.entry.Bind(wx.EVT_KEY_UP, self.Handle)
self.entry2.Bind(wx.EVT_KEY_UP, self.Handle)
def Handle(self, event):
keycode = event.GetKeyCode()
print keycode, event.Id # <- event.Id is always 0!
def checker(entry):
return bool(entry.GetValue().strip())
self.donebtn.Enable(checker(self.entry) and checker(self.entry2))
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, "Hello from wxPython")
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
événement.GetEventObject(). GetId() a bien fonctionné, merci. Bonne idée aussi avec functools.partial! –