2012-01-09 58 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