[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