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 :

Problème d'affichage d'une GridBagSizer [Python 2.X]


Sujet :

wxPython

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Points : 46
    Points
    46
    Par défaut Problème d'affichage d'une GridBagSizer
    Bonjour à tous,

    Je suis débutant en matière de développement en python, et je cherche à créer une petite application toute simple.

    Cette application serait sensée m'afficher une Frame contenant un Panel, dans lequel une GridBagSizer devrait se charger de positionner 4 boutons.

    Cependant, le petit problème que je rencontre, c'est que mes 4 boutons se retrouvent tout petits dans la partie supérieure gauche de l'écran, alors que je pense avoir fait le nécessaire pour qu'ils s'étalent sur toute l'étendue du Panel.

    Je vous joins ci-dessous mon code en espérant que vous éclairerez ma lanterne par rapport au détail que j'ai certainement omis de préciser.

    Avec tout mes remerciements anticipés.

    Petite précision, j'utilise Python version 2.7.8 pour Windows 32 bits et wxPython version 2.8.12.1 (unicode).

    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
     
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
    # importation du module wx
    import wx
    # Création d'une classe MaFrame dérivé de wx.Frame
    class MaFrame(wx.Frame):
        # Initialisation
        def __init__(self, title):
            super(MaFrame, self).__init__(parent=None, id=wx.ID_ANY, title=title)
            # Création d'une frameSizer horizontale
            frameSizer=wx.BoxSizer(orient=wx.HORIZONTAL)
            # Création d'un GridBagSizer
            panelSizer=wx.GridBagSizer(vgap=5, hgap=5)
            # Création d'un conteneur à l'intérieur de la Frame
            container=wx.Panel(parent=self, id=wx.ID_ANY, size=self.GetClientSize())
            # Création des boutons à l'intérieur du conteneur
            Button1=wx.Button(parent=container, id=wx.ID_ANY, label=u"Bouton 1")
            Button2=wx.Button(parent=container, id=wx.ID_ANY, label=u"Bouton 2")
            Button3=wx.Button(parent=container, id=wx.ID_ANY, label=u"Bouton 3")
            Button4=wx.Button(parent=container, id=wx.ID_CLOSE, label=u"Bouton 4")
            # Positionnement des boutons dans la GridBagSizer
            panelSizer.Add(item=Button1, pos=(0, 0), span=(2, 1), flag=wx.ALIGN_CENTRE)
            panelSizer.Add(item=Button2, pos=(0, 1), span=(2, 1), flag=wx.ALIGN_CENTRE)
            panelSizer.Add(item=Button3, pos=(2, 0), span=(2, 1), flag=wx.ALIGN_CENTRE)
            panelSizer.Add(item=Button4, pos=(2, 1), span=(2, 1), flag=wx.ALIGN_CENTRE)
            # On associe le GridBagSizer avec le conteneur
            container.SetSizer(panelSizer)
            # On ajoute le conteneur dans la frameSizer à orientation horizontale
            frameSizer.Add(container, proportion=1, flag=wx.EXPAND)
            # On empêche un dimensionnement trop petit de la frameSizer
            frameSizer.SetSizeHints(self)
            # On lie la frameSizer à la Frame
            self.SetSizer(frameSizer)
            # événements des boutons, ((Seulement l'événement de fermeture pour le Button4)
            Button4.Bind(wx.EVT_BUTTON, self.OnClose)
        # Création de la méthode de classe associée à l'action du Button4
        def OnClose(self, evt):
            self.Destroy()
    class MonApp(wx.App):
        """
        Classe spécifique à l'application créée
        """
        # Initialisation
        def OnInit(self):
            frame=MaFrame(u"Exemple d'une petite Appli")
            # Affichage de la frame
            frame.Show(True)
            # On met la frame en fenêtre principale
            self.SetTopWindow(frame)
            return True
        # Méthode de clôture
        def OnExit(self):
            result=wx.MessageDialog(parent=None, message="Au revoir", caption="Fermeture", style=wx.OK)
            # Affichage du dialogue d'au revoir
            result.ShowModal()
    # Exécution du programme
    app=MonApp(redirect=False)
    app.MainLoop()

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 50
    Points : 46
    Points
    46
    Par défaut Problème d'affichage d'une GridBagSizer
    Rebonjour à tous,

    Je viens de trouver une réponse à ma question.

    En fait, le sizer GridBagSizer nécessite les méthodes AddGrowableCol et AddGrowableRow pour que lors du redimensionnement de la fenêtre, les colonnes et lignes puissent s'élargir.

    Apparemment, la grosse utilité du GridBagSizer, c'est surtout de pouvoir fusionner des cellules.

    Il persiste toutefois un petit questionnement, c'est le fait que j'ai été obligé d'ajouter une méthode AddGrowableCol et AddGrowableRow pour pratiquement toutes les lignes et colonnes de mon sizer.

    Je pensais à tord que le simple fait de le faire pour ma première ligne par exemple, aurait suffit pour concerner tout le sizer, tant que le paramètre "proportion" n'a pas été défini.

    Mais bon, je peux dire que mon problème est parfaitement résolu.

    Je vous remercie pour la création de ce forum qui est très utile pour les débutants comme moi.

    Autre chose, vous remarquerez que dans mes codes, les noms des paramètres sont définis de façon explicite, c'est volontaire, ça me permet de mieux comprendre chacun de ces paramètres.

    Il est vrai que ce nommage explicite des paramètres n'est pas très utilisé, je pense quand même que ça a un aspect très pédagogique pour connaitre l'utilité de chacun de ces paramètres.

    Je vous recolle ci-dessous mon code corrigé, qui fonctionne parfaitement désormais.

    N'hésitez surtout pas à me corriger, si des fois vous constatez la moindre erreur de compréhension dans ma logique.

    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
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
    # importation du module wx
    import wx
    # Création d'une classe MaFrame dérivé de wx.Frame
    class MaFrame(wx.Frame):
        # Initialisation
        def __init__(self, title):
            super(MaFrame, self).__init__(parent=None, id=wx.ID_ANY, title=title)
            # Création d'une frameSizer horizontale
            frameSizer=wx.BoxSizer(orient=wx.HORIZONTAL)
            # Création d'un GridBagSizer
            panelSizer=wx.GridBagSizer(vgap=5, hgap=5)
            # Création d'un conteneur à l'intérieur de la Frame
            container=wx.Panel(parent=self, id=wx.ID_ANY, size=self.GetClientSize())
            # Création des boutons à l'intérieur du conteneur et positionnement de chaque bouton dans la GridBagSizer
            Button1=wx.Button(parent=container, id=wx.ID_ANY, label=u"Bouton 1")
            panelSizer.Add(item=Button1, pos=(0, 0), span=(2, 1), flag=wx.ALIGN_CENTRE)
            Button2=wx.Button(parent=container, id=wx.ID_ANY, label=u"Bouton 2")
            panelSizer.Add(item=Button2, pos=(0, 1), span=(2, 1), flag=wx.ALIGN_CENTRE)
            Button3=wx.Button(parent=container, id=wx.ID_ANY, label=u"Bouton 3")
            panelSizer.Add(item=Button3, pos=(2, 0), span=(2, 1), flag=wx.ALIGN_CENTRE)
            Button4=wx.Button(parent=container, id=wx.ID_CLOSE, label=u"Bouton 4")
            panelSizer.Add(item=Button4, pos=(2, 1), span=(2, 1), flag=wx.ALIGN_CENTRE)
            # On autorise le redimensionnement des colonnes et des lignes
            panelSizer.AddGrowableRow(0)
            panelSizer.AddGrowableRow(1)
            panelSizer.AddGrowableRow(2)
            panelSizer.AddGrowableRow(3)
            panelSizer.AddGrowableCol(0)
            panelSizer.AddGrowableCol(1)
            # On associe le GridBagSizer avec le conteneur
            container.SetSizer(panelSizer)
            # On ajoute le conteneur dans la frameSizer à orientation horizontale
            frameSizer.Add(container, proportion=1, flag=wx.EXPAND)
            # On lie la frameSizer à la Frame
            self.SetSizer(frameSizer)
            # On empêche un dimensionnement trop petit de la frameSizer
            #frameSizer.SetSizeHints(self)
            # On dimensionne notre Frame
            self.SetSize((400, 250))
            # événements des boutons, ((Seulement l'événement de fermeture pour le Button4)
            Button4.Bind(wx.EVT_BUTTON, self.OnClose)
        # Création de la méthode de classe associée à l'action du Button4
        def OnClose(self, evt):
            self.Destroy()
    class MonApp(wx.App):
        """
        Classe spécifique à l'application créée
        """
        # Initialisation
        def OnInit(self):
            frame=MaFrame(u"Exemple d'une petite Appli")
            # Affichage de la frame
            frame.Show(True)
            # On met la frame en fenêtre principale
            self.SetTopWindow(frame)
            return True
        # Méthode de clôture
        def OnExit(self):
            result=wx.MessageDialog(parent=None, message="Au revoir", caption="Fermeture", style=wx.OK)
            # Affichage du dialogue d'au revoir
            result.ShowModal()
    # Exécution du programme
    app=MonApp(redirect=False)
    app.MainLoop()

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

Discussions similaires

  1. [C#] problème d'affichage d'une nouvelle Form
    Par michel_frederic dans le forum C#
    Réponses: 15
    Dernier message: 17/11/2005, 16h40
  2. Problème avec affichage d'une table modifiée
    Par auriolbeach dans le forum Access
    Réponses: 6
    Dernier message: 31/10/2005, 15h45
  3. [GD] Problème d'affichage d'une image avec gd2
    Par turini dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h59
  4. Problème d'affichage d'une chaîne à l'écran
    Par Bubonik software dans le forum C
    Réponses: 7
    Dernier message: 08/05/2004, 20h47
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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