wxPython - classe SplitterWindow

O objeto desta classe é um gerenciador de layout, que contém duas subjanelas cujo tamanho pode ser alterado dinamicamente arrastando os limites entre elas. oSplitter control fornece uma alça que pode ser arrastada para redimensionar os controles.

wx.SplitterWindow classe tem um construtor muito básico com todos os parâmetros tendo valores padrão usuais.

wx.SplitterWindow(self, id, pos, size, style)

A lista de valores predefinidos para o parâmetro de estilo é a seguinte -

SN Parâmetros e descrição
1

wxSP_3D

Desenha uma borda e uma faixa com efeito 3D

2

wxSP_THIN_SASH

Desenha uma faixa fina

3

wxSP_3DSASH

Desenha uma faixa de efeito 3D (parte do estilo padrão)

4

wxSP_BORDER

Desenha uma borda padrão

5

wxSP_NOBORDER

Sem borda (padrão)

6

wxSP_PERMIT_UNSPLIT

Sempre permita desdobrar, mesmo com o tamanho mínimo do painel diferente de zero

Ligantes de eventos para a classe SplitterWindow -

SN Eventos e Descrição
1

EVT_SPLITTER_SASH_POS_CHANGING()

A posição da faixa está em processo de alteração

2

EVT_SPLITTER_SASH_POS_CHANGED()

A posição da faixa foi alterada

3

EVT_SPLITTER_UNSPLIT()

O divisor foi apenas não dividido

4

EVT_SPLITTER_DCLICK()

A faixa foi clicada duas vezes. O comportamento padrão é desfazer a divisão da janela quando isso acontece

O código a seguir demonstra o funcionamento do SplitterWindow. O objeto divisor é adicionado ao quadro de nível superior.

splitter = wx.SplitterWindow(self, -1)

Um painel é projetado para conter um objeto TextCtrl de várias linhas.

b = wx.BoxSizer(wx.HORIZONTAL) 
self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)
 
b.Add(self.text, 1, wx.EXPAND) 
panel1.SetSizerAndFit(b)

Um objeto ListBox é colocado em outro painel.

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)

O objeto divisor é dividido verticalmente e dois painéis são adicionados a duas subjanelas. A largura das subjanelas pode ser redimensionada com a ajuda do caixilho.

splitter.SplitVertically(panel2, panel1)

A lista completa do código é a seguinte -

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()

O código acima produz a seguinte saída -