wxPython - Clase SplitterWindow
El objeto de esta clase es un administrador de diseño, que contiene dos subventanas cuyo tamaño se puede cambiar dinámicamente arrastrando los límites entre ellas. losSplitter control proporciona un identificador que se puede arrastrar para cambiar el tamaño de los controles.
wx.SplitterWindow La clase tiene un constructor muy básico con todos los parámetros que tienen valores predeterminados habituales.
wx.SplitterWindow(self, id, pos, size, style)
La lista de valores predefinidos para el parámetro de estilo es la siguiente:
SN | Parámetros y descripción |
---|---|
1 | wxSP_3D Dibuja un borde y una hoja de efecto 3D |
2 | wxSP_THIN_SASH Dibuja una banda delgada |
3 | wxSP_3DSASH Dibuja una hoja de efecto 3D (parte del estilo predeterminado) |
4 | wxSP_BORDER Dibuja un borde estándar |
5 | wxSP_NOBORDER Sin borde (predeterminado) |
6 | wxSP_PERMIT_UNSPLIT Permita siempre que se deshaga, incluso con el tamaño mínimo del panel distinto de cero |
Carpetas de eventos para la clase SplitterWindow -
SN | Eventos y descripción |
---|---|
1 | EVT_SPLITTER_SASH_POS_CHANGING() La posición de la hoja está en proceso de cambio. |
2 | EVT_SPLITTER_SASH_POS_CHANGED() Se cambió la posición de la hoja |
3 | EVT_SPLITTER_UNSPLIT() El divisor se acaba de dividir |
4 | EVT_SPLITTER_DCLICK() Se hizo doble clic en la hoja. El comportamiento predeterminado es deshacer la ventana cuando esto sucede |
El siguiente código demuestra el funcionamiento de SplitterWindow. El objeto divisor se agrega al marco de nivel superior.
splitter = wx.SplitterWindow(self, -1)
Un panel está diseñado para contener un objeto TextCtrl de varias líneas.
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 objeto ListBox se coloca en otro panel.
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)
El objeto divisor se divide verticalmente y se agregan dos paneles a dos subventanas. El ancho de las subventanas se puede cambiar de tamaño con la ayuda de una hoja.
splitter.SplitVertically(panel2, panel1)
La lista completa de código es la siguiente:
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()
El código anterior produce la siguiente salida: