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 -