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 :

Notebook et Grid


Sujet :

wxPython

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Par défaut Notebook et Grid
    Je me bats avec mon PC et un Mac (pas les mêmes versions de python et de wx) pour sortir un notebook qui aurait différents onglets dont une feuille Grid.
    Je n'y parviens pas. En plus, la version dans la démo ne passe pas sur mes machines (l'import me dit qu'il manque toujours quelque chose: GridSimple,...).
    Une bonne âme peut-elle m'aider en corrigeant l'exemple suivant (adapté de celui d'Alain72) ?
    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
    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()
    Merci d'avance

    PS: je viens de commander sur Amazon le bouquin wx in action qui m'a l'air bien fait (j'ai lu les 2 chapîtres en accès libre) mais j'ai besoin d'avancer d'ici sa réception.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Par défaut
    Bonjour,

    Votre code n'est pas très limpide....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            # Instanciation de notre classe Notebook
            self.notebook = Onglets(self)
            # Instanciation de la classe SimpleGrid
            self.notebook= SimpleGrid(self)
    Dans self.notebook, vous instanciez successivement deux objets très différents.
    De plus, pour mettre un grille dans un onglet, il faudra que vous passiez comme paramètre "parent", le panneau de l'onglet dans lequel vous voulez mettre cette grille.

    self.grille = SimpleGrid([identificateur du panneau de l'onglet dans lequel vous voulez la mettre])

    Je n'ai pas regardé le reste.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Par défaut
    Il fallait notamment rajouter des sizers.
    Le code suivant fonctionne. Ca pourra toujours servir à quelqu'un. Création d'un notebook avec 3 onglets dont l'un contient une grid.
    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
    #! /usr/bin/env python
    #-*- coding: iso-8859-15 -*-
    import wx
    import wx.grid
    class PageOne(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
    class PageTwo(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))
    class PageThree(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent,size=(500,500))
            grid = wx.grid.Grid(self)
            grid.CreateGrid(5, 5)
            sizer = wx.BoxSizer()
            sizer.Add(grid, 1, wx.EXPAND)
            self.SetSizer(sizer)
     
    class MainFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, title="Simple Notebook Example")
            p = wx.Panel(self)
            nb = wx.Notebook(p)
            page1 = PageOne(nb)
            page2 = PageTwo(nb)
            page3 = PageThree(nb)
            nb.AddPage(page1, "Page 1")
            nb.AddPage(page2, "Page 2")
            nb.AddPage(page3, "Page 3")
            sizer = wx.BoxSizer()
            sizer.Add(nb, 1, wx.EXPAND|wx.ALL)
            p.SetSizer(sizer)
     
    if __name__ == "__main__":
        app = wx.App()
        MainFrame().Show()
        app.MainLoop()

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 17
    Par défaut Problème ?
    Je crois qu'il y a un soucis avec les sizers.

    Lorsque j'agrandis complètement la fenêtre les scrollbars disparaissent, mais elles ne réaparaissent plus ensuite !

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

Discussions similaires

  1. [Java] Grid Computing
    Par dinver dans le forum Développement
    Réponses: 5
    Dernier message: 03/01/2005, 10h18
  2. pbm de grid
    Par LionHeart dans le forum Bases de données
    Réponses: 5
    Dernier message: 24/06/2004, 06h17
  3. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 10h51
  4. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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