wxPython: ventanas acoplables

wxAuies una biblioteca de interfaz de usuario avanzada incorporada en la API wxWidgets. Wx.aui.AuiManager la clase central en el marco AUI.

AuiManageradministra los paneles asociados con un marco particular utilizando la información de cada panel en el objeto wx.aui.AuiPanelInfo. Aprendamos sobre varias propiedades del comportamiento flotante y de acoplamiento del control de objetos PanelInfo.

Colocar ventanas empotrables en el marco del nivel superior implica los siguientes pasos:

Primero, cree un objeto AuiManager.

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

Luego, se diseña un panel con los controles necesarios.

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)

Se establecen los siguientes parámetros de AuiPanelInfo.

  • Direction - Arriba, Abajo, Izquierda, Derecha o Centro

  • Position- Se puede colocar más de un panel dentro de una región acoplable. A cada uno se le asigna un número de posición.

  • Row- Aparece más de un panel en una fila. Al igual que aparece más de una barra de herramientas en la misma fila.

  • Layer - Los paneles se pueden colocar en capas.

Con este PanelInfo, el panel diseñado se agrega al objeto administrador.

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

El resto de la ventana de nivel superior puede tener otros controles como de costumbre.

El código completo es el siguiente:

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

El código anterior produce la siguiente salida: