wxPython - Gestione del layout
Un widget GUI può essere posizionato all'interno della finestra del contenitore specificando le sue coordinate assolute misurate in pixel. Le coordinate sono relative alle dimensioni della finestra definite dall'argomento size del suo costruttore. La posizione del widget all'interno della finestra è definita dapos argomento del suo costruttore.
import wx
app = wx.App()
window = wx.Frame(None, title = "wxPython Frame", size = (300,200))
panel = wx.Panel(window)
label = wx.StaticText(panel, label = "Hello World", pos = (100,50))
window.Show(True)
app.MainLoop()
Questo Absolute Positioning tuttavia non è adatto per i seguenti motivi:
La posizione del widget non cambia anche se la finestra viene ridimensionata.
L'aspetto potrebbe non essere uniforme su diversi dispositivi di visualizzazione con risoluzioni diverse.
La modifica del layout è difficile in quanto potrebbe essere necessario ridisegnare l'intero modulo.
L'API wxPython fornisce classi Layout per una gestione più elegante del posizionamento dei widget all'interno del contenitore. I vantaggi dei gestori di layout rispetto al posizionamento assoluto sono:
- I widget all'interno della finestra vengono ridimensionati automaticamente.
- Assicura un aspetto uniforme su dispositivi di visualizzazione con diverse risoluzioni.
- È possibile aggiungere o rimuovere widget in modo dinamico senza dover riprogettare.
Il gestore del layout si chiama Sizer in wxPython. Wx.Sizer è la classe base per tutte le sottoclassi sizer. Parliamo di alcuni dei dimensionatori importanti come wx.BoxSizer, wx.StaticBoxSizer, wx.GridSizer, wx.FlexGridSizer e wx.GridBagSizer.
SN | Misuratori e descrizione |
---|---|
1 | BoxSizer Questo sizer consente di disporre i controlli in modo riga o colonna. Il layout di BoxSizer è determinato dal suo argomento di orientamento (wxVERTICAL o wxHORIZONTAL). |
2 | GridSizer Come suggerisce il nome, un oggetto GridSizer presenta una griglia bidimensionale. I controlli vengono aggiunti nello slot della griglia nell'ordine da sinistra a destra e dall'alto verso il basso. |
3 | FlexiGridSizer Questo misuratore ha anche una griglia bidimensionale. Tuttavia, fornisce un po 'più di flessibilità nella disposizione dei controlli nelle celle. |
4 | GridBagSizer GridBagSizer è un misuratore versatile. Offre più miglioramenti rispetto a FlexiGridSizer. Il widget figlio può essere aggiunto a una cella specifica all'interno della griglia. |
5 | StaticBoxSizer Un StaticBoxSizer inserisce un box sizer in un box statico. Fornisce un bordo attorno alla scatola insieme a un'etichetta nella parte superiore. |