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
| #-*- coding: iso-8859-15 -*-
import wx
# 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 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)
# 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")
# 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