2012-01-09 46 views
2

我试着去创造这样的:wxPython的:与wx.SashLayoutWindow多个面板

|---------------------------------------------| 
| Panel 1a |  Panel 2a  | Panel 3 | 
|   |      |   | 
|   |      |   | 
|-----------------------------------|   | 
| Panel 1b |  Panel 2b  |   | 
|   |      |   | 
|---------------------------------------------| 

到目前为止,我只能创建这样的:

|---------------------------------------------| 
| Panel 1a |  Panel 2a  | Panel 3 | 
|   |      |   | 
|   |      |   | 
|---------------------------------------------| 

我怎么能分成两半板1a和板2A ?用分离器?

我的代码如下:

import wx 


class TestSashWindow(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, -1) 

     winids = [] 


     leftwin1 = wx.SashLayoutWindow(self, -1, wx.DefaultPosition, (200, 30), wx.NO_BORDER|wx.SW_3D) 
     leftwin1.SetDefaultSize((120, 1000)) 
     leftwin1.SetOrientation(wx.LAYOUT_VERTICAL) 
     leftwin1.SetAlignment(wx.LAYOUT_RIGHT) 
     leftwin1.SetSashVisible(wx.SASH_LEFT, True) 



     self.leftWindow1 = leftwin1 
     winids.append(leftwin1.GetId()) 
     self.remainingSpace = wx.Panel(self, -1, style=wx.SUNKEN_BORDER) 


     leftwin2 = wx.SashLayoutWindow(self, -1, wx.DefaultPosition, (200, 30), wx.NO_BORDER|wx.SW_3D) 
     leftwin2.SetDefaultSize((120, 1000)) 
     leftwin2.SetOrientation(wx.LAYOUT_VERTICAL) 
     leftwin2.SetAlignment(wx.LAYOUT_LEFT) 
     leftwin2.SetSashVisible(wx.SASH_RIGHT, True) 

     self.leftWindow2 = leftwin2 
     winids.append(leftwin2.GetId()) 
     self.remainingSpace = wx.Panel(self, -1, style=wx.SUNKEN_BORDER) 

     self.Bind(wx.EVT_SASH_DRAGGED_RANGE, self.OnSashDrag,id=min(winids), id2=max(winids)) 
     self.Bind(wx.EVT_SIZE, self.OnSize) 
     slw = leftwin1 

     x = wx.Notebook(slw, -1) 
     for i in xrange(2): 
      x.AddPage(wx.Panel(x, -1), str(i)) 

class mainframe(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1, size=(400,300), title="sash test") 

     self.a = TestSashWindow(self) 


if __name__ == '__main__': 
    a = wx.App(0) 
    b = mainframe() 
    b.Show(1) 
    a.MainLoop() 

回答

0

布局管理的generell概念是容器和部件。在容器中,您可以放置​​其他容器和小部件。要完成给定的布局,您必须以巧妙的方式将您的容器和小部件组织在层次结构中。由于您提供的代码仍然不完整,因此我不会为您提供完整的解决方案,而是回答您的问题,以便如何拆分这两个面板。

  1. 创建两个面板,即panel1panel2panel3。看来你已经得到了很多。
  2. 两个(例如一个BoxSizer
  3. 设置分级机创建两个面板,panel1apanel1bpanel1父。根据需要在这两个面板中放置小部件。
  4. 创建两个面板,panel2apanel2b,作为父母的panel2。根据需要在这两个面板中放置小部件。
  5. 完成!对于所需的布局,你不一定需要一个Splitter(仅当你希望让他们可以调整大小在这种情况下,panel1panel2被分路器来代替阅读this example的介绍。)

可视化:

+ mainframe (horizontal layout) 
| 
+-panel1 (vertical layout) 
| +-panel1a 
| +-panel1b 
| 
+-panel2 (vertical layout) 
| +panel2a 
| +panel2b 
| 
+-panel3