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 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() |