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