IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

wx.Notebook un cht'i tuto svp


Sujet :

wxPython

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut wx.Notebook un cht'i tuto svp
    Bonjour,

    Est-ce qu'un expert es wxPython pourrait nous expliquer
    comment utiliser une sous classe de wx.Notebook.
    Et l'ideal serait de nous expliquer comment on peut
    utiliser la doc wx2.x-doc pour y arriver tout seul....
    file:///usr/share/doc/wx2.6-doc/wx-m...tml#wxnotebook

    Bon d'accord c'est peut être un peu trop demander.....

  2. #2
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Ce qu'il faut retenir sur le wx.Notebook :
    Un onglet est constitué d'un conteneur (wx.Window, wx.Panel, etc.) ajouté au notebook avec un titre d'onglet.
    Les deux macros d'évènements spécifiques au Notebook sont les macros:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wx.EVT_NOTEBOOK_PAGE_CHANGED(id, func)
    qui réagit au clic sur l'onglet, après que celui-ci ait été affiché, et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wx.EVT_NOTEBOOK_PAGE_CHANGING(id, func)
    qui réagit avant que l'affichage de l'onglet cliqué ne soit intervenu.

    Ci-dessous un petit exemple commenté qui fait le tour du principal à connaître pour utiliser un notebook.

    Attention, des bugs persistent sous GTK (linux), qui apprécie moyennement la destruction d'un notebook simultanément à son contenu. Mais ça n'empêche en rien une utilisation classique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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()

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut [merci]
    Merci beaucoup :

    J'ai vraiment besoin de ce genre de travail pour avancer dans la
    compréhension et l'utilisation de wxPython.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Important à lire par tous SVP
    Par Community Management dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 22h54
  2. [LDAP] Cours & Tutos svp
    Par m3am3a dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 05/03/2008, 00h57
  3. [tuto] Renseignement SVP
    Par cysboy dans le forum Java ME
    Réponses: 7
    Dernier message: 20/11/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo