wxWidgets/wxPython/demo/SashWindow.py

147 lines
4.4 KiB
Python
Raw Normal View History

import wx
#---------------------------------------------------------------------------
class TestSashWindow(wx.Panel):
ID_WINDOW_TOP = 5100
ID_WINDOW_LEFT1 = 5101
ID_WINDOW_LEFT2 = 5102
ID_WINDOW_BOTTOM = 5103
def __init__(self, parent, log):
wx.Panel.__init__(self, parent, -1)
self.log = log
# will occupy the space not used by the Layout Algorithm
self.remainingSpace = wx.Panel(self, -1, style=wx.SUNKEN_BORDER)
self.Bind(
wx.EVT_SASH_DRAGGED_RANGE, self.OnSashDrag,
id=self.ID_WINDOW_TOP, id2=self.ID_WINDOW_BOTTOM,
)
self.Bind(wx.EVT_SIZE, self.OnSize)
# Create some layout windows
# A window like a toolbar
win = wx.SashLayoutWindow(
self, self.ID_WINDOW_TOP, wx.DefaultPosition, (200, 30),
wx.NO_BORDER|wx.SW_3D
)
win.SetDefaultSize((1000, 30))
win.SetOrientation(wx.LAYOUT_HORIZONTAL)
win.SetAlignment(wx.LAYOUT_TOP)
win.SetBackgroundColour(wx.Colour(255, 0, 0))
win.SetSashVisible(wx.SASH_BOTTOM, True)
self.topWindow = win
# A window like a statusbar
win = wx.SashLayoutWindow(
self, self.ID_WINDOW_BOTTOM, wx.DefaultPosition, (200, 30),
wx.NO_BORDER|wx.SW_3D
)
win.SetDefaultSize((1000, 30))
win.SetOrientation(wx.LAYOUT_HORIZONTAL)
win.SetAlignment(wx.LAYOUT_BOTTOM)
win.SetBackgroundColour(wx.Colour(0, 0, 255))
win.SetSashVisible(wx.SASH_TOP, True)
self.bottomWindow = win
# A window to the left of the client window
win = wx.SashLayoutWindow(
self, self.ID_WINDOW_LEFT1, wx.DefaultPosition, (200, 30),
wx.NO_BORDER|wx.SW_3D
)
win.SetDefaultSize((120, 1000))
win.SetOrientation(wx.LAYOUT_VERTICAL)
win.SetAlignment(wx.LAYOUT_LEFT)
win.SetBackgroundColour(wx.Colour(0, 255, 0))
win.SetSashVisible(wx.SASH_RIGHT, True)
win.SetExtraBorderSize(10)
textWindow = wx.TextCtrl(
win, -1, "", wx.DefaultPosition, wx.DefaultSize,
wx.TE_MULTILINE|wx.SUNKEN_BORDER
)
textWindow.SetValue("A sub window")
self.leftWindow1 = win
# Another window to the left of the client window
win = wx.SashLayoutWindow(
self, self.ID_WINDOW_LEFT2, wx.DefaultPosition, (200, 30),
wx.NO_BORDER|wx.SW_3D
)
win.SetDefaultSize((120, 1000))
win.SetOrientation(wx.LAYOUT_VERTICAL)
win.SetAlignment(wx.LAYOUT_LEFT)
win.SetBackgroundColour(wx.Colour(0, 255, 255))
win.SetSashVisible(wx.SASH_RIGHT, True)
self.leftWindow2 = win
def OnSashDrag(self, event):
if event.GetDragStatus() == wx.SASH_STATUS_OUT_OF_RANGE:
return
eID = event.GetId()
if eID == self.ID_WINDOW_TOP:
self.topWindow.SetDefaultSize((1000, event.GetDragRect().height))
elif eID == self.ID_WINDOW_LEFT1:
self.leftWindow1.SetDefaultSize((event.GetDragRect().width, 1000))
elif eID == self.ID_WINDOW_LEFT2:
self.leftWindow2.SetDefaultSize((event.GetDragRect().width, 1000))
elif eID == self.ID_WINDOW_BOTTOM:
self.bottomWindow.SetDefaultSize((1000, event.GetDragRect().height))
wx.LayoutAlgorithm().LayoutWindow(self, self.remainingSpace)
self.remainingSpace.Refresh()
def OnSize(self, event):
wx.LayoutAlgorithm().LayoutWindow(self, self.remainingSpace)
#---------------------------------------------------------------------------
def runTest(frame, nb, log):
win = TestSashWindow(nb, log)
return win
#---------------------------------------------------------------------------
overview = """\
wx.SashLayoutWindow responds to OnCalculateLayout events generated by
wxLayoutAlgorithm. It allows the application to use simple accessors to
specify how the window should be laid out, rather than having to respond
to events. The fact that the class derives from wx.SashWindow allows sashes
to be used if required, to allow the windows to be user-resizable.
The documentation for wx.LayoutAlgorithm explains the purpose of this class
in more detail.
"""
if __name__ == '__main__':
import sys,os
import run
run.main(['', os.path.basename(sys.argv[0])])