wxPython - GridBagSizer

GridBagSizerest un calibreur polyvalent. Il offre plus d'améliorations que FlexiGridSizer.Child widgetpeut être ajouté à une cellule spécifique de la grille. De plus, un widget enfant peut occuper plus d'une cellule horizontalement et / ou verticalement. Par conséquent, un texte statique et un contrôle de texte multiligne dans la même ligne peuvent avoir une largeur et une hauteur différentes.

Gridbag layoutdoit être minutieusement planifié en décidant de la position, de la portée et de l'écart. La classe wx.GridBagSizer n'a qu'un seul constructeur prenant deux arguments.

Wx.GridBagSizer(vgap,hgap)

La méthode la plus importante de la classe GridBagsizer est Add () qui prend position comme argument obligatoire. Les paramètres de portée, d'alignement, d'indicateurs de bordure et de taille de bordure sont facultatifs. S'ils ne sont pas explicitement utilisés, ils prennent les valeurs par défaut.

Wx.GridbagSizer().Add(control, pos, span, flags, border)

Le tableau suivant répertorie les méthodes de la classe GridBagSizer -

SN Méthodes et description
1

Add()

Ajoute un contrôle donné à la position spécifiée dans la grille

2

GetItemPosition()

Renvoie la position du contrôle dans la grille

3

SetItemPosition()

Place un contrôle à la position spécifiée dans la grille

4

GetItemSpan()

Renvoie l'étendue des lignes / colonnes d'un élément

5

SetItemSpan()

Étend l'élément spécifié sur le nombre de lignes / colonnes

Le code suivant affiche un formulaire dans lequel des étiquettes (StaticText) sont associées à des zones de texte (TexCtrl). Les objets TextCtrl sont ajoutés avec le paramètre span spécifié. Par conséquent, la largeur des zones de texte s'étend sur plus d'une colonne. La zone de texte pour le nom s'étend sur deux colonnes.

tc = wx.TextCtrl(panel) 
sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5)

La zone de texte pour l'adresse est un contrôle de texte multiligne s'étendant sur trois colonnes.

tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 
sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|wx.ALL, border = 5)

La ligne contenant le contrôle de texte multiligne pour la description est définie pour pouvoir être agrandie afin qu'elle se développe verticalement vers le bas, si le formulaire est étiré.

tc4 = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 
sizer.Add(tc4, pos = (3,1), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
sizer.AddGrowableRow(3)

Voici le code complet -

import wx  

class Example(wx.Frame): 
   
   def __init__(self, parent, title): 
      super(Example, self).__init__(parent, title = title) 
             
      self.InitUI() 
      self.Centre() 
      self.Show()      
         
   def InitUI(self): 
       
      panel = wx.Panel(self) 
      sizer = wx.GridBagSizer(0,0)
		
      text = wx.StaticText(panel, label = "Name:") 
      sizer.Add(text, pos = (0, 0), flag = wx.ALL, border = 5)
		
      tc = wx.TextCtrl(panel) 
      sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5) 
         
      text1 = wx.StaticText(panel, label = "address") 
      sizer.Add(text1, pos = (1, 0), flag = wx.ALL, border = 5) 
		
      tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 
      sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|wx.ALL, border = 5) 
         
      text2 = wx.StaticText(panel,label = "age") 
      sizer.Add(text2, pos = (2, 0), flag = wx.ALL, border = 5) 
		
      tc2 = wx.TextCtrl(panel) 
      sizer.Add(tc2, pos = (2,1), flag = wx.ALL, border = 5) 
		
      text3 = wx.StaticText(panel,label = "Mob.No") 
      sizer.Add(text3, pos = (2, 2), flag = wx.ALIGN_CENTER|wx.ALL, border = 5)
		
      tc3 = wx.TextCtrl(panel) 
      sizer.Add(tc3, pos = (2,3),flag = wx.EXPAND|wx.ALL, border = 5) 
         
      text4 = wx.StaticText(panel, label = "Description") 
      sizer.Add(text4, pos = (3, 0), flag = wx.ALL, border = 5) 
		
      tc4 = wx.TextCtrl(panel,style =  wx.TE_MULTILINE) 
      sizer.Add(tc4, pos = (3,1), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5) 
      sizer.AddGrowableRow(3) 
         
      buttonOk = wx.Button(panel, label = "Ok") 
      buttonClose = wx.Button(panel, label = "Close" ) 
		
      sizer.Add(buttonOk, pos = (4, 2),flag = wx.ALL, border = 5) 
      sizer.Add(buttonClose, pos = (4, 3), flag = wx.ALL, border = 5)
		
      panel.SetSizerAndFit(sizer)
		
app = wx.App() 
Example(None, title = 'GridBag Demo') 
app.MainLoop()

Le code ci-dessus produit la sortie suivante -