1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| import wx
myEVT_BUTTON_ENABLE = wx.NewEventType()
myEVT_BUTTON_DISABLE = wx.NewEventType()
EVT_BUTTON_ENABLE = wx.PyEventBinder(myEVT_BUTTON_ENABLE, 1)
EVT_BUTTON_DISABLE = wx.PyEventBinder(myEVT_BUTTON_DISABLE, 1)
class MyEvent(wx.PyCommandEvent):
def __init__(self, evtType, id):
wx.PyCommandEvent.__init__(self, evtType, id)
class MyButtonTest(wx.Button):
def __init__(self, *args, **kwargs):
wx.Button.__init__(self, *args, **kwargs)
def ChangeState(self):
if self.IsEnabled():
self.Disable()
self.SetLabel("disable")
else:
self.Enable(True)
self.SetLabel("enable")
def Enable(self, val=True):
if val:
evt = MyEvent(myEVT_BUTTON_ENABLE, self.GetId())
self.GetEventHandler().ProcessEvent(evt)
return wx.Button.Enable(self, True)
else:
evt = MyEvent(myEVT_BUTTON_DISABLE, self.GetId())
self.GetEventHandler().ProcessEvent(evt)
return wx.Button.Enable(self, False)
def Disable(self):
evt = MyEvent(myEVT_BUTTON_DISABLE, self.GetId())
self.GetEventHandler().ProcessEvent(evt)
return wx.Button.Disable(self)
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
panel = wx.Panel(self, -1)
sizer = wx.GridBagSizer(5, 5)
self.btnTest = MyButtonTest(panel, -1, "Enable")
btnCtrl = wx.Button(panel, -1, "changer l'etat")
self.Bind(wx.EVT_BUTTON, self.EvtBtnCtrl, btnCtrl)
self.Bind(EVT_BUTTON_ENABLE, self.EvtBtnEnable, self.btnTest)
self.Bind(EVT_BUTTON_DISABLE, self.EvtBtnDisable, self.btnTest)
sizer.Add((0, 0), (0, 0))
sizer.Add(self.btnTest, (1, 1))
sizer.Add(btnCtrl, (2, 1))
sizer.Add((0, 0), (3, 2))
panel.SetSizer(sizer)
panel.Fit()
self.SetSize(self.GetBestSize())
def EvtBtnCtrl(self, evt):
self.btnTest.ChangeState()
evt.Skip()
def EvtBtnEnable(self, evt):
print "le bouton est actif"
def EvtBtnDisable(self, evt):
print "le bouton est inactif"
if __name__ == "__main__":
app = wx.App(redirect=False)
fr = MyFrame(None, -1, 'test')
fr.Show(True)
app.MainLoop() |
Partager