wxPython - BoxSizer

Questo sizer consente di disporre i controlli in modo riga o colonna. BoxSizer’s il layout è determinato dal suo argomento di orientamento (wxVERTICAL o wxHORIZONTAL).

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

Il metodo Add () (ereditato da wxSizer) lo aggiunge alla riga / colonna successiva del sizer.

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

Il parametro di proporzione controlla il modo in cui il controllo modifica la dimensione in risposta alle dimensioni del contenitore. La combinazione di vari parametri di flag decide l'aspetto del controllo nel misuratore. Di seguito sono riportate alcune delle bandiere:

Flag di allineamento

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

Bandiere di confine

wx.TOP
wx.BOTTOM
wx. SINISTRA
wx.RIGHT
wx.ALL

Flag di comportamento

SN Flag di comportamento e descrizione
1

wx.EXPAND

L'oggetto si espanderà per riempire lo spazio fornito (wx.GROW è lo stesso)

2

wx.SHAPED

Simile a EXPAND ma mantiene le proporzioni dell'elemento

3

wx.FIXED_MINSIZE

Non lascia che l'articolo diventi più piccolo della sua dimensione minima iniziale

4

wx.RESERVE_SPACE_EVEN_IF_ HIDDEN

Non consente al misuratore di recuperare lo spazio di un elemento quando è nascosto

Il parametro border è un numero intero, lo spazio in pixel da lasciare tra i controlli. Per esempio,

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

Di seguito sono riportati alcuni altri metodi della classe wx.BoxSizer -

SN Metodi e descrizione
1

SetOrientation()

Imposta l'orientamento wxHORIZONTAL o wxVERTICAL

2

AddSpacer()

Aggiunge spazio non estensibile

3

AddStretchSpacer()

Aggiunge spazio estensibile in modo che il ridimensionamento della finestra influenzi proporzionalmente le dimensioni del controllo

4

Clear()

Rimuove i bambini da Sizer

5

Detach()

Rimuove un controllo da Sizer senza distruggerlo

6

Insert()

Inserisce un controllo figlio in una posizione specificata

7

Remove()

Rimuove un bambino dal misuratore e lo distrugge

Esempio

Nel codice seguente, un dimensionatore di box verticale viene applicato a un oggetto del pannello posizionato all'interno della finestra wxFrame.

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

La prima riga della casella mostra un'etichetta (oggetto wx.StaticText) al centro con un bordo di 20 pixel attorno ad essa.

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)

Nella seconda riga viene visualizzato un oggetto wx.Button. A causa del flag wx.EXPAND occupa l'intera larghezza della finestra.

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

La riga successiva contiene anche un pulsante. Non viene aggiunto con il flag EXPAND. Invece, a causa di ALIGN_CENTER_HORIZONTAL, il pulsante con la dimensione predefinita appare al centro in orizzontale.

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

Nella riga successiva, viene aggiunto un oggetto TextCtrl con il parametro di proporzione impostato su 1 e il flag EXPAND impostato. Di conseguenza, è di dimensioni più alte.

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

L'ultima riga contiene un oggetto sizer orizzontale, che a sua volta ha un'etichetta e un pulsante separati da uno spazio estensibile.

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)

Infine, il dimensionamento box verticale viene applicato all'oggetto wx.Panel.

Di seguito è riportato il codice completo -

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

Il codice precedente produce il seguente output: