wxPython - BoxSizer

Ce sizer permet aux commandes d'être disposées en ligne ou en colonne. BoxSizer’s La disposition est déterminée par son argument d'orientation (wxVERTICAL ou wxHORIZONTAL).

Box = wx.BoxSizer(wxHORIZONTAL)
Box = wx.BoxSizer(wxVERTICAL)

La méthode Add () (héritée de wxSizer) l'ajoute à la ligne / colonne suivante du sizer.

Box.Add(control, proportion, flag, border)

Le paramètre proportion contrôle la manière dont le contrôle modifie sa taille en réponse aux dimensions du conteneur. La combinaison de divers paramètres d'indicateur décide de l'apparence du contrôle dans le calibreur. Voici quelques-uns des drapeaux -

Drapeaux d'alignement

wx.ALIGN_TOP
wx.ALIGN_BOTTOM
wx.ALIGN_LEFT
wx.ALIGN_RIGHT
wx.ALIGN_CENTER_VERTICAL
wx.ALIGN_CENTER_HORIZONTAL

Drapeaux de bordure

wx.TOP
wx.BOTTOM
wx.LEFT
wx.RIGHT
wx.ALL

Indicateurs de comportement

SN Indicateurs de comportement et description
1

wx.EXPAND

L'élément s'agrandira pour remplir l'espace qui lui est fourni (wx.GROW est le même)

2

wx.SHAPED

Similaire à EXPAND mais conserve les proportions de l'élément

3

wx.FIXED_MINSIZE

Ne laisse pas l'élément devenir plus petit que sa taille minimale initiale

4

wx.RESERVE_SPACE_EVEN_IF_ HIDDEN

Ne permet pas au calibreur de récupérer l'espace d'un élément lorsqu'il est masqué

Le paramètre border est un entier, l'espace en pixels à laisser entre les contrôles. Par exemple,

b = wx.StaticText(self, -1, “Enter a number”) 
Box.Add(b,1,wx.ALL|wx.EXPAND,10)

Voici quelques méthodes supplémentaires de la classe wx.BoxSizer -

SN Méthodes et description
1

SetOrientation()

Définit l'orientation wxHORIZONTAL ou wxVERTICAL

2

AddSpacer()

Ajoute un espace non extensible

3

AddStretchSpacer()

Ajoute un espace extensible de sorte que le redimensionnement de la fenêtre affecte la taille du contrôle proportionnellement

4

Clear()

Supprime les enfants du sizer

5

Detach()

Supprime un contrôle du sizer sans détruire

6

Insert()

Insère un contrôle enfant à une position spécifiée

sept

Remove()

Supprime un enfant du sizer et le détruit

Exemple

Dans le code suivant, un dimensionneur de boîte verticale est appliqué à un objet de panneau qui est placé dans la fenêtre wxFrame.

p = wx.Panel(self) 
vbox = wx.wx.BoxSizer(wx.VERTICAL)

La première ligne de la boîte affiche une étiquette (objet wx.StaticText) au centre avec une bordure de 20 pixels autour d'elle.

l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE ) 
vbox.Add(l1,0,  wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20)

Dans la deuxième ligne, un objet wx.Button s'affiche. En raison de l'indicateur wx.EXPAND, il occupe toute la largeur de la fenêtre.

b1 = wx.Button(p, label = "Btn1") 
vbox.Add(b1,0, wx.EXPAND)

La ligne suivante contient également un bouton. Il n'est pas ajouté avec l'indicateur EXPAND. Au lieu de cela, à cause de ALIGN_CENTER_HORIZONTAL, le bouton avec la taille par défaut apparaît au centre horizontalement.

b2 = wx.Button(p, label = "Btn2") 
vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL)

Dans la ligne suivante, un objet TextCtrl avec un paramètre de proportion défini sur 1 et un ensemble d'indicateurs EXPAND est ajouté. En conséquence, il est de taille plus grande.

t = wx.TextCtrl(p) 
vbox.Add(t,1,wx.EXPAND,10)

La dernière ligne contient un objet sizer horizontal, qui à son tour a une étiquette et un bouton séparés par un espace extensible.

hbox = wx.BoxSizer(wx.HORIZONTAL) 
l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE) 
hbox.Add(l2,0,wx.EXPAND) 

b3 = wx.Button(p,label = "Btn3") 
hbox.AddStretchSpacer(1) 
hbox.Add(b3,0,wx.ALIGN_LEFT,20) 
vbox.Add(hbox,1,wx.ALL|wx.EXPAND)

Enfin, le calibreur de boîte verticale est appliqué à l'objet wx.Panel.

Voici le code complet -

import wx 
 
class Example(wx.Frame): 
   
   def __init__(self, parent, title): 
      super(Example, self).__init__(parent, title = title, size = (200,300)) 
             
      self.InitUI() 
      self.Centre() 
      self.Show()
		
   def InitUI(self): 
      p = wx.Panel(self) 
      vbox = wx.wx.BoxSizer(wx.VERTICAL) 
      l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE ) 
      vbox.Add(l1,0,  wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20) 
      b1 = wx.Button(p, label = "Btn1") 
      vbox.Add(b1,0,wx.EXPAND) 
          
      b2 = wx.Button(p, label = "Btn2") 
      vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL) 
      t = wx.TextCtrl(p) 
      vbox.Add(t,1,wx.EXPAND,10) 
      hbox = wx.BoxSizer(wx.HORIZONTAL) 
      l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE) 
		
      hbox.Add(l2,0,wx.EXPAND) 
      b3 = wx.Button(p,label = "Btn3") 
      hbox.AddStretchSpacer(1) 
      hbox.Add(b3,0,wx.ALIGN_LEFT,20) 
      vbox.Add(hbox,1,wx.ALL|wx.EXPAND) 
      p.SetSizer(vbox) 
          
app = wx.App() 
Example(None, title = 'BoxSizer demo') 
app.MainLoop()

Le code ci-dessus produit la sortie suivante -