Partage
  • Partager sur Facebook
  • Partager sur Twitter

wxPython, boxsizer, statictext, etc

Positionnement des éléments

Sujet résolu
    19 février 2011 à 11:04:30

    Hi everyone,

    J'essaie de me dépatouiller avec le positionnement d'élément dans ma fenêtre, mais je suis bloqué, j'y arrive plus.


    Avant de vous donner mon code pour que vous puissiez éventuellement me dire ce qui cloche, je vous montre un "modèle" grosso modo du résultat que j'essaie d'obtenir:

    Image utilisateur

    Quand j'exécute mon code ça donne ça:

    Image utilisateur

    Les 2 boutons (intitulés "Tester" et "Effacer") devraient être l'un à côté de l'autre (et non l'un sur l'autre) juste en dessous de la barre de menu, les deux textes statiques (intitulés "Entrée" et "Sortie") devraient être en-dessous des boutons, et il ne devrait pas y avoir d'espace entre les 2 textes statiques et les deux champs de textes dessous eux...

    Voici juste la partie du code concerné:

    filemenu= wx.Menu() #Menu fichier
    		menuAbout= filemenu.Append(wx.ID_ABOUT, "&About","A propos")
    		menuExit = filemenu.Append(wx.ID_EXIT,"E&xit","Quitter le programme")
    		menuBar = wx.MenuBar()
    		menuBar.Append(filemenu,"&Fichier")
    		self.SetMenuBar(menuBar)
    		self.Bind(wx.EVT_MENU, self.OnExit, menuExit)
    		self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout)
    		
    		self.CreateStatusBar()
    		
    		butbar = wx.BoxSizer(wx.HORIZONTAL) #Conteneur horizontal boutons
    		butsend = wx.Button(self, -1, "&Tester", size=(130, -1))
    		butbar.Add(butsend, -1)
    		self.Bind(wx.EVT_BUTTON, self.OnTest, butsend)
    		butclear = wx.Button(self, -1, "&Effacer", size=(130, -1))
    		butbar.Add(butclear, -1)
    		self.Bind(wx.EVT_BUTTON, self.OnClear, butclear)
    		
    		textin = wx.StaticText(self, -1, "Entrée")
    		textout = wx.StaticText(self, -1, "Sortie")
    
    		self.ain = wx.TextCtrl(self, style=wx.TE_MULTILINE) # Champ de texte supérieur
    		self.aout = wx.TextCtrl(self, style=wx.TE_MULTILINE) # Champ de texte inférieur
    		
    		acont = wx.BoxSizer(wx.HORIZONTAL) #Conteneur vertical champs textes
    		
    		left = wx.BoxSizer(wx.VERTICAL)
    		right = wx.BoxSizer(wx.VERTICAL)
    		
    		left.Add(textin, -1, wx.EXPAND)
    		left.Add(self.ain, -1, wx.EXPAND)
    		right.Add(textout, -1, wx.EXPAND)
    		right.Add(self.aout, -1, wx.EXPAND)
    		
    		acont.Add(left, -1, wx.EXPAND)
    		acont.Add(right, -1, wx.EXPAND)
    
    		self.SetSizer(acont)
    		self.Centre()
    		self.Show()
    


    Un grand merci à vous si vous pouvez m'aiguillez et m'aider à avancer!! :)
    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2011 à 20:55:50

      Salut,
      • - pour les boutons tester et effacer : la box butbar n'est jamais liée a la fenetre donc les deux boutons se retrouvent avec une position par défaut en (0, 0). Il faut donc une nouvelle box verticale qui contiendra butbar et acont
      • - pour l'espace entre les textes et les champs : le deuxième paramètre de la méthode Add indique la proportion d'espace donnée au widget : si tu mets la même aux textes et aux champs, ils auront un espace équivalent. Pour que seuls les champs s'agrandissent, il faut mettre 0 aux textes et 1 aux champs


      Voici un code qui affiche ce que tu veux :
      #!/usr/bin/python
      # -*- coding: utf-8 -*-
      # simple.py
      
      import wx
      
      app = wx.App()
      
      frame = wx.Frame(None, -1, 'simple.py')
      filemenu= wx.Menu() #Menu fichier
      menuAbout= filemenu.Append(wx.ID_ABOUT, "&About","A propos")
      menuExit = filemenu.Append(wx.ID_EXIT,"E&xit","Quitter le programme")
      menuBar = wx.MenuBar()
      menuBar.Append(filemenu,"&Fichier")
      frame.SetMenuBar(menuBar)
      
      frame.CreateStatusBar()
      
      butbar = wx.BoxSizer(wx.HORIZONTAL) #Conteneur horizontal boutons
      butsend = wx.Button(frame, -1, "&Tester", size=(130, -1))
      butbar.Add(butsend, -1)
      butclear = wx.Button(frame, -1, "&Effacer", size=(130, -1))
      butbar.Add(butclear, -1)
      
      textin = wx.StaticText(frame, -1, "Entrée")
      textout = wx.StaticText(frame, -1, "Sortie")
      
      frame.ain = wx.TextCtrl(frame, style=wx.TE_MULTILINE) # Champ de texte supérieur
      frame.aout = wx.TextCtrl(frame, style=wx.TE_MULTILINE) # Champ de texte inférieur
      
      acont = wx.BoxSizer(wx.HORIZONTAL) #Conteneur vertical champs textes
      
      left = wx.BoxSizer(wx.VERTICAL)
      right = wx.BoxSizer(wx.VERTICAL)
      
      left.Add(textin, 0, wx.EXPAND)
      left.Add(frame.ain, 1, wx.EXPAND)
      right.Add(textout, 0, wx.EXPAND)
      right.Add(frame.aout, 1, wx.EXPAND)
      
      acont.Add(left, 1, wx.EXPAND)
      acont.Add(right, 1, wx.EXPAND)
      
      box = wx.BoxSizer(wx.VERTICAL)
      box.Add(butbar, 0)
      box.Add(acont, 1, wx.EXPAND)
      
      frame.SetSizer(box)
      frame.Centre()
      frame.Show()
      frame.Show()
      
      app.MainLoop()
      
      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2011 à 6:20:44

        Hi tsp,

        effectivement, je me suis rendu compte de ce que tu as abordé en regardant le code généré par wxglade avec lequel j'ai fait des tests de positionnement...

        Merci beaucoup de t'être penché sur ma demande! :)
        • Partager sur Facebook
        • Partager sur Twitter

        wxPython, boxsizer, statictext, etc

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown