[wxPython-users] AUI manager and maximize pane (suggested fix)
Max Landaeus
max at landaeus.com
Tue Jan 22 01:05:36 PST 2008
Skipped content of type multipart/alternative-------------- next part -----=
---------
import wx
import wx.aui
class AUIFrame(wx.Frame):
def __init__(self, parent, id=3D-1, title=3D"", pos=3Dwx.DefaultPositio=
n,
size=3Dwx.DefaultSize, style=3Dwx.DEFAULT_FRAME_STYLE |
wx.SUNKEN_BORDER |
wx.CLIP_CHILDREN):
=
wx.Frame.__init__(self, parent, id, title, pos, size, style)
self.statusbar =3D self.CreateStatusBar(2, wx.ST_SIZEGRIP)
# tell FrameManager to manage this frame =
self._mgr =3D wx.aui.AuiManager()
self._mgr.SetManagedWindow(self)
=
# NOTE: It is important to set minsize large enough to fit all
# windows. If minsize is too small the renderer will recurse and a =
max
# recurse depth error will occur
self.SetMinSize((300,200))
=
# Create some panels
for index in range(4):
name=3D"Window " + str(index)
txtC=3Dwx.TextCtrl(self,wx.ID_ANY)
txtC.AppendText('This is '+name)
self._mgr.AddPane(txtC,wx.aui.AuiPaneInfo().Name(name).
Caption(name).Show(True).MaximizeButton(True))
# keep a reference to the windows that you add to the aui-manag=
er
=
# make one of the panes a center pane
self._mgr.GetPane("Window 0").CenterPane()
self._mgr.GetPane("Window 1").Top()
=
self._mgr.Update()
=
# The following lines MUST be positioned AFTER the first call to _m=
gr.Update()
# Save the initial perspectives
=
# lastGoodPerspective is for rendering
self.lastGoodPerspective=3Dself._mgr.SavePerspective()
# restorePerspective is used to save state before maximizing any pa=
ne
self.restorePerspective=3Dself._mgr.SavePerspective()
# guard to avoid recursion in onRender
self.renderIsListening=3DTrue
# Intercept the aui-events
self.Bind(wx.aui.EVT_AUI_RENDER,self.onRender)
self.Bind(wx.aui.EVT_AUI_PANE_MAXIMIZE,self.onMaximize)
self.Bind(wx.aui.EVT_AUI_PANE_RESTORE,self.onPaneRestore)
=
def onPaneRestore(self, event):
self._mgr.LoadPerspective(self.RestorePerspective) =
self._mgr.Update()
=
def onMaximize(self, event):
pane=3Devent.GetPane()
self.RestorePerspective=3Dself._mgr.SavePerspective()
pane.Right()
=
def onRender(self,event):
outOfRange=3DFalse
if self.renderIsListening:
self.renderIsListening=3DFalse
for thisPane in self._mgr.GetAllPanes():
x,y =3D thisPane.window.GetClientSize()
if (x < 1 or y < 1):
outOfRange=3DTrue =
if outOfRange:
# If any window is to small restore the previous perspective
self._mgr.LoadPerspective(self.lastGoodPerspective) =
self._mgr.Update()
self.Refresh()
else:
# All windows are OK save this perspective for next time
self.lastGoodPerspective=3Dself._mgr.SavePerspective()
event.Skip() =
self.renderIsListening=3DTrue =
=
def onSize(self,evt):
x,y=3Dself.GetSize()
#if x<self.lastGoodX or y < self.lastGoodY:
#self.SetSize((self.lastGoodX,self.lastGoodY))
=
=
if __name__ =3D=3D '__main__':
app =3D wx.App(False)
f =3D AUIFrame(None)
f.Show()
app.MainLoop()
More information about the wxpython-users
mailing list