wxPython - GridBagSizer

GridBagSizerè un misuratore versatile. Offre più miglioramenti rispetto a FlexiGridSizer.Child widgetpuò essere aggiunto a una cella specifica all'interno della griglia. Inoltre, un widget figlio può occupare più di una cella orizzontalmente e / o verticalmente. Pertanto, un testo statico e un controllo di testo multilinea nella stessa riga possono avere larghezza e altezza diverse.

Gridbag layoutdovrebbe essere pianificato meticolosamente decidendo la posizione, lo span e il gap. La classe wx.GridBagSizer ha un solo costruttore che accetta due argomenti.

Wx.GridBagSizer(vgap,hgap)

Il metodo più importante della classe GridBagsizer è Add () che prende posizione come argomento obbligatorio. I parametri di estensione, allineamento, contrassegni del bordo e dimensione del bordo sono facoltativi. Se non utilizzati esplicitamente assumono valori predefiniti.

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

La tabella seguente elenca i metodi della classe GridBagSizer -

SN Metodi e descrizione
1

Add()

Aggiunge il controllo dato nella posizione specificata nella griglia

2

GetItemPosition()

Restituisce la posizione di controllo nella griglia

3

SetItemPosition()

Posiziona un controllo nella posizione specificata nella griglia

4

GetItemSpan()

Restituisce l'estensione di righe / colonne di un elemento

5

SetItemSpan()

Si estende l'elemento specificato sul numero di righe / colonne

Il codice seguente visualizza un modulo in cui sono presenti etichette (StaticText) associate a caselle di testo (TexCtrl). Gli oggetti TextCtrl vengono aggiunti con il parametro span specificato. Pertanto, la larghezza delle caselle di testo si estende su più di una colonna. La casella di testo per il nome si estende su due colonne.

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

La casella di testo per l'indirizzo è un controllo di testo multilinea che si estende su tre colonne.

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 riga contenente il controllo di testo su più righe per la descrizione è impostata per essere ampliabile in modo che si espanda verticalmente verso il basso, se il modulo è allungato.

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)

Di seguito è riportato il codice completo -

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

Il codice precedente produce il seguente output: