| 12
 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