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 :

Dimensionnement d'un boxSizer dans une frame


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Par défaut Dimensionnement d'un boxSizer dans une frame
    Bonjour,
    J'ai besoin d'un petit coup de main sur ce coup là, je fais donc appel à vos compétences.
    Y aurait-il quelqu'un dans l'assistance qui pourrait m'expliquer pourquoi ma barre d'outils et mon Panel vert ne remplissent pas la totalité de ma fenêtre grise ?
    Enfin, jetez un oeil sur le code, je pense que vous comprendrez mieux qu'une tonne d'explications confuses.
    Merci de votre réponse

    Module 01
    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
     
    #!/usr/bin/env python
    # -*- coding: cp1252 -*-
     
     
    # Tempo_01.py
     
    import wx
    import Tempo_02
     
     
    class SimpleFrame(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title)
     
            frameSizer = wx.BoxSizer(wx.VERTICAL)
            panelSizer = wx.BoxSizer(wx.VERTICAL)
     
            conteneur = wx.Panel(self, -1)
            conteneur.SetBackgroundColour('#80f14e')
     
     
    #*********************************************************
            # panel_A : Barre d'outils
            panel_A = Tempo_02.Barre_Outils_01(conteneur)
     
    #*********************************************************
            # panel_B : Interface Graphique
            panel_B = Tempo_02.Interface_Graphique_01(conteneur)
     
     
            panelSizer.Add(panel_A, 2, wx.EXPAND)
            panelSizer.Add(panel_B, 2, wx.EXPAND)
     
     
            conteneur.SetSizer(panelSizer)
            frameSizer.Add(conteneur, 1, wx.EXPAND)
            self.SetSizer(frameSizer)
            frameSizer.SetSizeHints(self)
     
            self.SetSize((500,500))
     
            self.Centre()
            self.Show(True)
     
     
     
    app = wx.App()
    SimpleFrame(None, -1, 'Ma Belle Fenêtre')
    app.MainLoop()
    Module 02
    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/env python
    # -*- coding: cp1252 -*-
     
    # Tempo_02.py
     
    import wx
     
    #-------------------------------------------------------------------------
    class Barre_Outils_01(wx.Panel):
        """Barre d'outils de la fenêtre principale"""
    #-------------------------------------------------------------------------
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
     
            TBFLAGS = ( wx.TB_HORIZONTAL
                      | wx.NO_BORDER
                      | wx.TB_FLAT
                      )
     
            tb = wx.ToolBar(self, style=TBFLAGS)  # self
     
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(tb, 0, wx.EXPAND)
            self.SetSizer(sizer)
     
            tsize = (24,24)
     
           # Définition des différents icones de la barre d'outils
            Png_01 =  wx.Bitmap("exit.png")
            Png_02 =  wx.Bitmap("book.png")
            Png_03 =  wx.Bitmap("linux.png")
     
            tb.SetToolBitmapSize(tsize)
     
            # Dessine la Barre d'outils
            tb.AddLabelTool(10, "", Png_01)
            tb.AddSeparator()
     
            tb.AddLabelTool(20, "", Png_02)
            tb.AddSeparator()
     
            tb.AddLabelTool(30, "", Png_03)
            tb.AddSeparator()
     
            tb.Realize()
     
    #-------------------------------------------------------------------------
    class Interface_Graphique_01(wx.Panel):
        """Interface_Graphique de la fenêtre principale"""
    #-------------------------------------------------------------------------
        def __init__(self, parent):
            wx.Panel.__init__(self, parent, -1)
     
            panel = wx.Panel(self, -1)
            panel.SetBackgroundColour('#4f5049')
     
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(panel, 1, wx.EXPAND)
            self.SetSizer(sizer)
    Images attachées Images attachées    

  2. #2
    Membre éprouvé
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Par défaut
    Bonsoir,

    Tu veux arriver à quel résultat au juste ?

    En l'état ton code fait les choses suivantes :
    - il créée une frame,
    - il créée une panel vert qui couvre toute la frame,
    - il créée un panel gris clair et un panel gris foncé et leur demande de couvrir, l'un la moitié supérieure du panel vert, l'autre la moitié inférieure du panel vert

    Ce qui fait que l'on ne voit plus le panel vert, il est recouvert par les deux autres.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Par défaut
    Merci de ta réponse.
    l'idée générale consiste à créer un panel indépendant de la fonction principale.
    j'aurais, je l'espère, une interface graphique indépendante située dans un module (tempo_02).

    Et donc, la finalité c'est d'avoir un panel vert en fond dans ma frame avec un panel gris clair centré au milieu de ce panel vert .
    En fait, je n'arrive pas à comprendre ce qui se passe.
    Dans mon idée initiale :
    je créer un panel gris foncé qui servira de receptacle
    ensuite, je creer un panel vert issu de mon module tempo_02 (par la suite ce panel sera beaucoup plus étoffé ^^)
    que je rempli avec un panel gris clair centré au milieu.
    A la sortie de mon module tempo_02, je remplie le panel gris foncé par le panel vert.
    ce que tu me decris ne ressemble pas du tout à mon but initial ^^

    je ne comprends pas pourquoi je creé un panel vert au début (pourquoi, il n'est pas gris foncé ?)
    ensuite, à quel endroit et par quoi, je demande à couvrir la moitiée supérieure et la moitiée inferieure de mon panel vert.
    pour le coup, je suis complétement perdu.
    D'autre part, lorsque je lance l'applic, je voie les trois couleurs de mes panels.
    à aucun moment j'ai un panel qui disparait sous les deux autres. au contraire, le panel vert est le plus présent !
    merci de bien vouloir affranchir un p'auve pepere comme moi !

  4. #4
    Membre éprouvé
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Par défaut
    >Bonsoir,

    On va essayer d'y aller pas à pas. On est tous passés par là .

    Il me semble que je t'avais déjà répondu sur un autre post et que ton problème c'était alors d'appréhender la notion de parent : ben c'est toujours là que tu bloques .

    Dans le fichier Tempo_01 tout d'abord...

    ligne 19 :
    conteneur = wx.Panel(self, -1)
    Tu crées un panel et tu lui indique que son parent c'est self (= ta frame) : donc, ton panel sera posé sur ta frame.

    ligne 20 :
    conteneur.SetBackgroundColour('#80f14e')
    Tu demandes à ce panel de prendre une couleur de fond, ce code correspond au vert clair.

    lignes 16, 37 et 38 :
    Tu crées un sizer, tu le colles sur self (= ta frame, pour mémoire), et tu demandes que ton panel soit géré par ce sizer ; ligne 37 : tu précises que le sizer doit gérer ton panel de telle sorte qu'il s'étende à toute la surface de ta frame.

    Pour tester, désactive temporairement les lignes 23 à 33 incluses et lance le programme : tu as bien une frame avec un panel vert qui couvre tout.

    Tu constates donc que ton panel vert n'est pas du tout créé dans Tempo02...

    Les lignes 25 et 26 créent deux autres panels issus des classes qui se trouvent dans le fichier Tempo_02 :
    - "panel_A", de la classe Barre_Outils_01 ; dans cette classe, aucune couleur de fond particulière n'est spécifiée, donc il a la couleur par défaut d'un panel : gris clair si on est sous Linux, transparent si on est sous Windows ;
    - "panel_B", de la classe Interface_Graphique_01 ; ligne 55 (dans Tempo_02), il est spécifié qu'un panel de cette classe est gris foncé.

    Le parent de ces deux panels est "conteneur" (= le panel vert) ; c'est ce que tu demandes lignes 25 et 29 (le parent est le premier argument - ici, le seul - que l'on passe entre parenthèses quand on crée un objet).

    Lignes 17, 32, 33, 36 :
    Tu crées un sizer, tu le colles sur conteneur (= le panel vert), et tu demandes que panel_A et panel_B soient gérés par ce sizer ; ligne 36 : tu précises que le sizer doit gérer ces deux panels de telle sorte qu'ils s'étendent à toute la surface de leur parent ; ce parent, c'est le panel vert : il est donc complètement recouvert par les deux autres !

    Sous Linux, on ne voit pas de vert du tout, sous windows, le vert apparaît entre la toolbar et la panel gris foncé, mais il est bel et bien recouvert par Panel_A (rappel : Panel_A est gris sous Linux, transparent sous Win) ; tu sembles être sous Windows, donc tu peux vérifier en ajoutant ceci ligne 46 dans Tempo_02 :
    self.SetBackgroundColour('blue')

    Lance alors le programme : tout ce qui est vert sera recouvert...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 82
    Par défaut
    Bien, bien, je te remercie de ta patience... tu dois en avoir à revendre... surtout lorsque je me suis apperçu que l'on ne parlait plus des mêmes fichiers.... D'où le "gris clair" par exemple.. Oui, je sais.... Moi aussi je me suis traité d'andouille...
    J'ai corsé un petit peu la difficulté pour comprendre l'utilisation d'un panel et d'un sizer. Donc, j'ai repris ce que tu m'as expliqué précédement en rajoutant un carré gris clair dans mon panel gris foncé (j'ai joint le code pour que l'on parle de la meme chose (Aiiiyyeeeeuuu.... Pas taper, j'ai des lunettes)

    Bon, je crois comprendre que j'ai deux problèmes en fait...

    1 : Je ne maitrise pas la taille de mon panel_A (la barre d'outils) , j'ai beau essayé de chercher, je n'arrive pas à modifier la taille de sortie de ce panel... je pensais naivement qu'il prenait la taille de ma ToolBar et qu'il s'adaptait à la taille de ma frame parent !
    Ce n'est pas du tout le cas ^^ en fait, il apparait avec une taille que je ne maitrise pas (exactement la moitiée de la taille de mon panel vert clair). L'idée générale étant d'avoir quelque chose qui ressemble à une barre d'outils tout court...

    2 : Le deuxième souci semble plus pervère, on dirait que je crée systematiquement deux parties de panel à chaque fois que j'utilise un sizer.
    à chaque fois, j'ai l'impression d'avoir en sortie la moitiée de la moitiée. ( Erhrmm, à la relecture j'ai moi meme du mal à me comprendre... Je t'invite à essayer le code qui suit pour me comprendre)

    Pourquoi deux moitiées de panel à chaque fois ? (j'ai gardé un code couleur pour chaque panel)

    Module 1 :
    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
    #!/usr/bin/env python
    # -*- coding: cp1252 -*-
     
     
    # module1.py
     
    import wx
    import module2
     
     
    class SimpleFrame(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, title)
     
            frameSizer = wx.BoxSizer(wx.VERTICAL)
            panelSizer = wx.BoxSizer(wx.VERTICAL)
     
            conteneur = wx.Panel(self, -1)
            conteneur.SetBackgroundColour('#80f14e') #Vert Clair
     
     
    #*********************************************************
            # panel_A : Barre d'outils
            panel_A = module2.Barre_Outils_01(conteneur)
     
    #*********************************************************
            # panel_B : Interface Graphique
            panel_B = module2.Interface_Graphique_01(conteneur)
     
            panelSizer.Add(panel_A, 1, wx.EXPAND)
            panelSizer.Add(panel_B, 1, wx.EXPAND)
     
            conteneur.SetSizer(panelSizer)
            frameSizer.Add(conteneur, 1, wx.EXPAND)
            self.SetSizer(frameSizer)
            frameSizer.SetSizeHints(self)
     
            self.SetSize((500,500))
     
            self.Centre()
            self.Show(True)
     
     
     
    app = wx.App()
    SimpleFrame(None, -1, u'Ma Belle Fen?tre')
    app.MainLoop()
    Module 2 :
    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
    #!/usr/bin/env python
    # -*- coding: cp1252 -*-
     
    # module2.py
     
    import wx
     
    #-------------------------------------------------------------------------
    class Barre_Outils_01(wx.Panel):
        """Barre d'outils de la fenêtre principale"""
    #-------------------------------------------------------------------------
        def __init__(self, parent):
     
            wx.Panel.__init__(self, parent)
     
            TBFLAGS = ( wx.TB_HORIZONTAL
                      | wx.NO_BORDER
                      | wx.TB_FLAT
                      )
     
            tb = wx.ToolBar(self, style=TBFLAGS)  # self
     
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(tb, 0, wx.EXPAND)
            self.SetSizer(sizer)
     
            tsize = (24,24)
     
           # Définition des différents icones de la barre d'outils
            Png_01 =  wx.Bitmap("exit.png")
            Png_02 =  wx.Bitmap("book.png")
            Png_03 =  wx.Bitmap("linux.png")
     
            tb.SetToolBitmapSize(tsize)
     
            # Dessine la Barre d'outils
            tb.AddLabelTool(10, "", Png_01)
            tb.AddSeparator()
     
            tb.AddLabelTool(20, "", Png_02)
            tb.AddSeparator()
     
            tb.AddLabelTool(30, "", Png_03)
            tb.AddSeparator()
     
            tb.Realize()
     
            self.SetBackgroundColour('blue') # Bleu
     
     
    #-------------------------------------------------------------------------
     
    #-------------------------------------------------------------------------
    class Interface_Graphique_01(wx.Panel):
        """Interface_Graphique de la fenêtre principale"""
    #-------------------------------------------------------------------------
        def __init__(self, parent):
            wx.Panel.__init__(self, parent, -1)
     
            panel = wx.Panel(self, -1)
            panel.SetBackgroundColour('#4f5049') # Gris foncé
     
            midPan = wx.Panel(panel, -1)
            midPan.SetBackgroundColour('#ededed') # Gris clair
     
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(midPan, 1, wx.EXPAND | wx.ALL, 20)
            sizer.Add(panel, 1, wx.EXPAND)
            self.SetSizer(sizer)

  6. #6
    Membre éprouvé
    Inscrit en
    Octobre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 92
    Par défaut
    Bonsoir,

    Pour ton point 1 : sisi, tu peux maîtriser tout ça ! Reprenons le code de ton sizer, car tout est là :

    panelSizer.Add(panel_A, 2, wx.EXPAND)
    panelSizer.Add(panel_B, 2, wx.EXPAND)

    Premier élément important quand on utilise un sizer et qu'on ajoute un objet à ceux qui doivent être gérés par le sizer, le chiffre qui se trouve en seconde position :
    - ici, tu as 2 éléments, et tu as passé en argument "2" à chaque fois : donc on a 2 + 2 = 4. Le premier objet va occuper 2/4 de la place disponible, le second, 2/4 ; ce qui revient à dire que chaque panneau va occuper la moitié de l'espace dispo !
    - modifie la première de ces deux lignes en mettant "1" au lieu de "2" ; on va désormais avoir 1 + 2 = 3. Le premier panel occupera cette fois 1/3 de l'espace dispo et le second 2/3 ;
    -modifie encore la première ligne en mettant "0", et sur la seconde n'importe quel autre chiffre (mais en ce cas, par convention on met habituellement 1)...

    Pour ton point 2, petit jeu :
    Combien y a-t-il de panels :
    - dans la version initiale de ton code ?
    - dans la version modifiée ?
    Top chrono...

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

Discussions similaires

  1. [flash] ouvrir une page dans une frame différente
    Par viena dans le forum Intégration
    Réponses: 6
    Dernier message: 01/08/2007, 15h54
  2. [FLASH MX2004] Test dans une "frame" ?
    Par Invité1 dans le forum Flash
    Réponses: 7
    Dernier message: 26/07/2005, 18h15
  3. faire apparaitre et disparaitre un panel dans une frame
    Par Ghost Dog dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 22/04/2005, 01h55
  4. Réponses: 6
    Dernier message: 21/03/2005, 13h22
  5. [servlet][JSP]forwarder dans une frame
    Par deldin dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/06/2004, 18h03

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