wxPython - Classe SplitterWindow

L'objet de cette classe est un gestionnaire de mise en page, qui contient deux sous-fenêtres dont la taille peut être modifiée dynamiquement en faisant glisser les limites entre elles. leSplitter control donne une poignée qui peut être déplacée pour redimensionner les contrôles.

wx.SplitterWindow class a un constructeur très basique avec tous les paramètres ayant des valeurs par défaut habituelles.

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

La liste des valeurs prédéfinies pour le paramètre de style est la suivante -

SN Paramètres et description
1

wxSP_3D

Dessine une bordure et une ceinture à effet 3D

2

wxSP_THIN_SASH

Dessine une fine ceinture

3

wxSP_3DSASH

Dessine une ceinture à effet 3D (partie du style par défaut)

4

wxSP_BORDER

Dessine une bordure standard

5

wxSP_NOBORDER

Pas de bordure (par défaut)

6

wxSP_PERMIT_UNSPLIT

Toujours permettre de se désolidariser, même avec une taille de volet minimale différente de zéro

Classeurs d'événements pour la classe SplitterWindow -

SN Événements et description
1

EVT_SPLITTER_SASH_POS_CHANGING()

La position de l'ouvrant est en train d'être modifiée

2

EVT_SPLITTER_SASH_POS_CHANGED()

La position de l'ouvrant a été modifiée

3

EVT_SPLITTER_UNSPLIT()

Le séparateur a été juste non divisé

4

EVT_SPLITTER_DCLICK()

La ceinture a été double-cliquée. Le comportement par défaut est de ne pas diviser la fenêtre lorsque cela se produit

Le code suivant illustre le fonctionnement de SplitterWindow. L'objet séparateur est ajouté au cadre de niveau supérieur.

splitter = wx.SplitterWindow(self, -1)

Un Panel est conçu pour contenir un objet TextCtrl multiligne.

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 objet ListBox est placé dans un autre panneau.

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'objet séparateur est divisé verticalement et deux panneaux sont ajoutés à deux sous-fenêtres. La largeur des sous-fenêtres peut être redimensionnée à l'aide de la ceinture.

splitter.SplitVertically(panel2, panel1)

La liste complète du code est la suivante -

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

Le code ci-dessus produit la sortie suivante -