| 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
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 
 | #-*- coding: iso-8859-15 -*-
import wx
##try:
##    import GridSimple
##except ImportError:
##    raise ImportError, "GridSimple non disponible"
import wx.grid as gridlib
 
# Constantes d'ID des cases à cocher du menu
CHK_ROUGE = 101
CHK_BLEU = 102
CHK_VERT = 103
 
class Onglets(wx.Notebook):
    # Classe dérivée du wx.Notebook
    def __init__(self, parent):
        wx.Notebook.__init__(self, parent, -1)
 
    def AjoutePage(self, couleur, nom):
        # Méthode d'ajout d'un onglet au notebook
        # On crée une fenêtre (là de type wx.Panel) qui servira de page
        win = wx.Panel(self, -1)
        win.SetBackgroundColour(couleur)
        # On ajoute cette fenêtre au notebook
        # en lui donnant le titre de l'onglet
        self.AddPage(win, nom)
 
    def SupprimePage(self, index):
        # Méthode de suppression d'un onglet
        self.DeletePage(index)
 
 
class SimpleGrid(gridlib.Grid): ##, mixins.GridAutoEditMixin):
    def __init__(self, parent):
        gridlib.Grid.__init__(self, parent, -1)
        ##mixins.GridAutoEditMixin.__init__(self)
        #self.log = log
        self.moveTo = None
 
        #self.Bind(wx.EVT_IDLE, self.OnIdle)
 
        self.CreateGrid(10, 10)#, gridlib.Grid.SelectRows)
 
    def AjoutePage(self, couleur, nom):
        # Méthode d'ajout d'un onglet au notebook
        # On crée une fenêtre (là de type wx.Panel) qui servira de page
        win = wx.Panel(self, -1)
        #win.SetBackgroundColour(couleur)
        # On ajoute cette fenêtre au notebook
        # en lui donnant le titre de l'onglet
        #self.AddPage(win, nom)
 
class Fenetre(wx.Frame):
    # Frame destinée à tester notre notebook
    def __init__(self):
        wx.Frame.__init__(self, None, -1, title = "Test Notebook", size = (500, 400))
 
        # Barre de menu comprenant un menu de trois cases à cocher
        menubar = wx.MenuBar()
        menu = wx.Menu()
        menu.AppendCheckItem(CHK_ROUGE, "Page rouge")
        menu.AppendCheckItem(CHK_BLEU, "Page bleue")
        menu.AppendCheckItem(CHK_VERT, "Page verte")
        menubar.Append(menu, "Onglets")
        self.SetMenuBar(menubar)
        menu.Check(CHK_ROUGE, True)
        menu.Check(CHK_BLEU, True)
        menu.Check(CHK_VERT, True)
 
        # Instanciation de notre classe Notebook
        self.notebook = Onglets(self)
        # Instanciation de la classe SimpleGrid
        self.notebook= SimpleGrid(self)
        # Ajout de trois onglets dans le notebook
        self.notebook.AjoutePage(wx.RED, "Rouge")
        self.notebook.AjoutePage(wx.BLUE, "Bleu")
        self.notebook.AjoutePage(wx.GREEN, "Vert")
        #magrille=SimpleGrid(self)
        self.notebook.AjoutePage(wx.WHITE,SimpleGrid)
 
 
        # Ajout d'une barre d'état à deux champs
        self.etat = wx.StatusBar(self, -1)
        self.etat.SetFieldsCount(2)
        self.SetStatusBar(self.etat)
 
        # On amorce le gestionnaire d'évènements du notebook
        # 1- Pour celui qui intervient après le changement d'onglet
        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnChanged)
        # 2- Pour celui qui intervient au moment du changement d'onglet
        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnChanging)
        # Puis celui du Menu
        self.Bind(wx.EVT_MENU, self.OnMenu)
 
    def OnChanged(self, evt):
        # On récupère l'index de la nouvelle page pour l'insérer
        # dans un message
        index = evt.GetSelection()
        message = "On se positionne sur l'onglet n° %s"%index
        # On affiche le message dans la zone 2 de la barre d'état
        self.etat.SetStatusText(message, 1)
        # On laisse l'action se dérouler
        evt.Skip()
 
    def OnChanging(self, evt):
        # On récupère l'index de la page quittée pour l'insérer
        # dans un message
        index = evt.GetSelection()
        message = "On quitte l'onglet n° %s"%index
        # On affiche le message dans la zone 1 de la barre d'état
        self.etat.SetStatusText(message, 0)
        # On laisse l'action se dérouler
        evt.Skip()
 
    def OnMenu(self, evt):
        # On recupère l'ID de l'item de menu cliqué
        # Pour alimenter les variables couleur et nom
        if evt.GetId() == CHK_ROUGE :
            couleur = wx.RED
            nom = "Rouge"
        elif evt.GetId() == CHK_BLEU:
            couleur = wx.BLUE
            nom = "Bleu"
        else :
            couleur = wx.GREEN
            nom = "Vert"
 
        # On teste alors si le clic a eu pour conséquence de cocher le menu
        if evt.IsChecked():
            # Si oui, on ajoute un onglet avec un panel de la couleur indiquée
            self.notebook.AjoutePage(couleur, nom)
        else:
            # Si non, on recherche l'index de l'onglet de la même couleur
            for x in range(self.notebook.GetPageCount()):
                if self.notebook.GetPageText(x) == nom :
                    pos = x
                    # Et on le supprime
                    self.notebook.SupprimePage(pos)
        # On laisse l'action se dérouler
        evt.Skip()
 
class App(wx.App):
    def OnInit(self):
        f = Fenetre()
        f.Show(True)
        self.SetTopWindow(f)
        return True
 
if __name__ == "__main__":
    monApp = App()
    monApp.MainLoop() | 
Partager