3 from wxPython
.wx
import *
4 from wxScrolledWindow
import MyCanvas
6 #----------------------------------------------------------------------
8 class MyParentFrame(wxMDIParentFrame
):
10 ID_WINDOW_LEFT1
= 5101
11 ID_WINDOW_LEFT2
= 5102
12 ID_WINDOW_BOTTOM
= 5103
15 wxMDIParentFrame
.__init
__(self
, None, -1, "MDI Parent", size
=(600,400),
16 style
= wxDEFAULT_FRAME_STYLE | wxHSCROLL | wxVSCROLL
)
20 menu
.Append(5000, "&New Window")
21 menu
.AppendSeparator()
22 menu
.Append(5001, "E&xit")
25 menubar
.Append(menu
, "&File")
26 self
.SetMenuBar(menubar
)
28 #self.CreateStatusBar()
30 EVT_MENU(self
, 5000, self
.OnNewWindow
)
31 EVT_MENU(self
, 5001, self
.OnExit
)
34 EVT_SASH_DRAGGED_RANGE(self
,
35 self
.ID_WINDOW_TOP
, self
.ID_WINDOW_BOTTOM
,
37 EVT_SIZE(self
, self
.OnSize
)
40 # Create some layout windows
41 # A window like a toolbar
42 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_TOP
, style
= wxNO_BORDER|wxSW_3D
)
43 win
.SetDefaultSize((1000, 30))
44 win
.SetOrientation(wxLAYOUT_HORIZONTAL
)
45 win
.SetAlignment(wxLAYOUT_TOP
)
46 win
.SetBackgroundColour(wxColour(255, 0, 0))
47 win
.SetSashVisible(wxSASH_BOTTOM
, true
)
52 # A window like a statusbar
53 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_BOTTOM
, style
= wxNO_BORDER|wxSW_3D
)
54 win
.SetDefaultSize((1000, 30))
55 win
.SetOrientation(wxLAYOUT_HORIZONTAL
)
56 win
.SetAlignment(wxLAYOUT_BOTTOM
)
57 win
.SetBackgroundColour(wxColour(0, 0, 255))
58 win
.SetSashVisible(wxSASH_TOP
, true
)
60 self
.bottomWindow
= win
63 # A window to the left of the client window
64 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_LEFT1
, style
= wxNO_BORDER|wxSW_3D
)
65 win
.SetDefaultSize((120, 1000))
66 win
.SetOrientation(wxLAYOUT_VERTICAL
)
67 win
.SetAlignment(wxLAYOUT_LEFT
)
68 win
.SetBackgroundColour(wxColour(0, 255, 0))
69 win
.SetSashVisible(wxSASH_RIGHT
, TRUE
)
70 win
.SetExtraBorderSize(10)
71 textWindow
= wxTextCtrl(win
, -1, "", wxDefaultPosition
, wxDefaultSize
,
72 wxTE_MULTILINE|wxSUNKEN_BORDER
)
73 textWindow
.SetValue("A sub window")
75 self
.leftWindow1
= win
78 # Another window to the left of the client window
79 win
= wxSashLayoutWindow(self
, self
.ID_WINDOW_LEFT2
, style
= wxNO_BORDER|wxSW_3D
)
80 win
.SetDefaultSize((120, 1000))
81 win
.SetOrientation(wxLAYOUT_VERTICAL
)
82 win
.SetAlignment(wxLAYOUT_LEFT
)
83 win
.SetBackgroundColour(wxColour(0, 255, 255))
84 win
.SetSashVisible(wxSASH_RIGHT
, TRUE
)
86 self
.leftWindow2
= win
89 def OnSashDrag(self
, event
):
90 if event
.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE
:
94 if eID
== self
.ID_WINDOW_TOP
:
95 self
.topWindow
.SetDefaultSize(wxSize(1000, event
.GetDragRect().height
))
97 elif eID
== self
.ID_WINDOW_LEFT1
:
98 self
.leftWindow1
.SetDefaultSize(wxSize(event
.GetDragRect().width
, 1000))
101 elif eID
== self
.ID_WINDOW_LEFT2
:
102 self
.leftWindow2
.SetDefaultSize(wxSize(event
.GetDragRect().width
, 1000))
104 elif eID
== self
.ID_WINDOW_BOTTOM
:
105 self
.bottomWindow
.SetDefaultSize(wxSize(1000, event
.GetDragRect().height
))
107 wxLayoutAlgorithm().LayoutMDIFrame(self
)
108 self
.GetClientWindow().Refresh()
111 def OnSize(self
, event
):
112 wxLayoutAlgorithm().LayoutMDIFrame(self
)
115 def OnExit(self
, evt
):
119 def OnNewWindow(self
, evt
):
120 self
.winCount
= self
.winCount
+ 1
121 win
= wxMDIChildFrame(self
, -1, "Child Window: %d" % self
.winCount
)
122 canvas
= MyCanvas(win
)
126 #----------------------------------------------------------------------
130 frame
= MyParentFrame()
132 self
.SetTopWindow(frame
)