wxPython - Classe SplitterWindow
Oggetto di questa classe è un layout manager, che contiene due sottofinestre la cui dimensione può essere modificata dinamicamente trascinando i confini tra di loro. IlSplitter control fornisce una maniglia che può essere trascinata per ridimensionare i controlli.
wx.SplitterWindow class ha un costruttore molto semplice con tutti i parametri che hanno valori predefiniti usuali.
wx.SplitterWindow(self, id, pos, size, style)
L'elenco dei valori predefiniti per il parametro di stile è il seguente:
SN | Parametri e descrizione |
---|---|
1 | wxSP_3D Disegna un bordo e una fascia effetto 3D |
2 | wxSP_THIN_SASH Disegna una fascia sottile |
3 | wxSP_3DSASH Disegna una fascia effetto 3D (parte dello stile predefinito) |
4 | wxSP_BORDER Disegna un bordo standard |
5 | wxSP_NOBORDER Nessun bordo (predefinito) |
6 | wxSP_PERMIT_UNSPLIT Consentire sempre di annullare la divisione, anche con la dimensione minima del riquadro diversa da zero |
Raccoglitori di eventi per la classe SplitterWindow -
SN | Eventi e descrizione |
---|---|
1 | EVT_SPLITTER_SASH_POS_CHANGING() La posizione dell'anta è in fase di modifica |
2 | EVT_SPLITTER_SASH_POS_CHANGED() La posizione dell'anta è stata modificata |
3 | EVT_SPLITTER_UNSPLIT() Lo splitter è stato appena diviso |
4 | EVT_SPLITTER_DCLICK() La fascia è stata cliccata due volte. Il comportamento predefinito è di annullare la suddivisione della finestra quando ciò accade |
Il codice seguente mostra il funzionamento di SplitterWindow. L'oggetto splitter viene aggiunto al frame di primo livello.
splitter = wx.SplitterWindow(self, -1)
Un pannello è progettato per contenere un oggetto TextCtrl su più righe.
b = wx.BoxSizer(wx.HORIZONTAL)
self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)
b.Add(self.text, 1, wx.EXPAND)
panel1.SetSizerAndFit(b)
Un oggetto ListBox viene inserito in un altro pannello.
panel2 = wx.Panel(splitter, -1)
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET', 'C#']
lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(lst,1)
panel2.SetSizer(hbox1)
L'oggetto splitter viene diviso verticalmente e due pannelli vengono aggiunti a due sottofinestre. La larghezza delle sottofinestre può essere ridimensionata con l'aiuto dell'anta.
splitter.SplitVertically(panel2, panel1)
L'elenco completo del codice è il seguente:
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (350,300))
splitter = wx.SplitterWindow(self, -1)
panel1 = wx.Panel(splitter, -1)
b = wx.BoxSizer(wx.HORIZONTAL)
self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)
b.Add(self.text, 1, wx.EXPAND)
panel1.SetSizerAndFit(b)
panel2 = wx.Panel(splitter, -1)
languages = ['C', 'C++', 'Java', 'Python', 'Perl',
'JavaScript', 'PHP' ,'VB.NET' ,'C#']
lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(lst,1)
panel2.SetSizer(hbox1)
splitter.SplitVertically(panel2, panel1)
self.Centre()
self.Bind(wx.EVT_LISTBOX, self.onListBox, lst)
self.Show(True)
def onListBox(self, event):
self.text.AppendText( "Current selection: " +
event.GetEventObject().GetStringSelection() +"\n")
ex = wx.App()
Mywin(None,'Splitter Demo')
ex.MainLoop()
Il codice precedente produce il seguente output: