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: