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