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: