wxPython - Windows ancrable

wxAuiest une bibliothèque d'interface utilisateur avancée intégrée à l'API wxWidgets. Wx.aui.AuiManager la classe centrale du framework AUI.

AuiManagergère les volets associés à un cadre particulier en utilisant les informations de chaque volet dans l'objet wx.aui.AuiPanelInfo. Découvrons les différentes propriétés de l'ancrage des contrôles d'objets PanelInfo et du comportement flottant.

L'installation de fenêtres ancrables dans le cadre de niveau supérieur implique les étapes suivantes:

Tout d'abord, créez un objet AuiManager.

self.mgr = wx.aui.AuiManager(self)

Ensuite, un panneau avec les commandes requises est conçu.

pnl = wx.Panel(self) 
pbox = wx.BoxSizer(wx.HORIZONTAL) 
text1 = wx.TextCtrl(pnl, -1, "Dockable", style = wx.NO_BORDER | wx.TE_MULTILINE) 
pbox.Add(text1, 1, flag = wx.EXPAND) 
pnl.SetSizer(pbox)

Les paramètres suivants d'AuiPanelInfo sont définis.

  • Direction - Haut, bas, gauche, droite ou centre

  • Position- Plusieurs volets peuvent être placés dans une zone ancrable. Chacun reçoit un numéro de position.

  • Row- Plus d'un volet apparaît sur une ligne. Tout comme plus d'une barre d'outils apparaissant dans la même ligne.

  • Layer - Les volets peuvent être placés en couches.

À l'aide de ce PanelInfo, le panneau conçu est ajouté à l'objet gestionnaire.

info1 = wx.aui.AuiPaneInfo().Bottom() 
self.mgr.AddPane(pnl,info1)

Le reste de la fenêtre de niveau supérieur peut avoir d'autres contrôles comme d'habitude.

Le code complet est le suivant -

import wx 
import wx.aui
  
class Mywin(wx.Frame):
  
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title, size = (300,300)) 
		
      self.mgr = wx.aui.AuiManager(self)
		
      pnl = wx.Panel(self) 
      pbox = wx.BoxSizer(wx.HORIZONTAL)
      text1 = wx.TextCtrl(pnl, -1, "Dockable", style = wx.NO_BORDER | wx.TE_MULTILINE) 
      pbox.Add(text1, 1, flag = wx.EXPAND) 
      pnl.SetSizer(pbox) 
         
      info1 = wx.aui.AuiPaneInfo().Bottom() 
      self.mgr.AddPane(pnl, info1) 
      panel = wx.Panel(self) 
      text2 = wx.TextCtrl(panel, size = (300,200), style =  wx.NO_BORDER | wx.TE_MULTILINE) 
      box = wx.BoxSizer(wx.HORIZONTAL) 
      box.Add(text2, 1, flag = wx.EXPAND) 
         
      panel.SetSizerAndFit(box) 
      self.mgr.Update() 
		
      self.Bind(wx.EVT_CLOSE, self.OnClose) 
      self.Centre() 
      self.Show(True) 
		
   def OnClose(self, event): 
      self.mgr.UnInit() 
      self.Destroy() 
		
app = wx.App()
Mywin(None,"Dock Demo")  
app.MainLoop()

Le code ci-dessus produit la sortie suivante -