wxPython frame的布局详细解释

 对于初学者, wxPython的布局定位是有点麻烦,需要仔细查看官方文档。(原文: wiki.wxpython.org/learnSizer3.py
     
      以下是我学习过程中实现的实例,以便与大家共同交流:)
     
1. wx.BoxSizer() 在wxPython定位构件程中使用最多最直观的sizer.


        原型:
 
  1. wx.BoxSizer.__init__(selforient) 
  2. sizer wx.BoxSizer(wx.HORIZONTAL)   #创建一个水平方向的box wx.VERTICAL ,垂直方向的box  

    它还有以下常用到的方法:
 
  1. Add(selfitem, proportion, flag, border, userData)  
  2. Insert(selfbefore, item, proportion, flag, border, userData, realIndex)  
  3. Layout(self 
  4. Prepend(selfitem, proportion, flag, border, userData)  
  5. Remove(selfindx, pop 
  6. Show(selfitem, show) 
  7. .
  8. .
  9. .
  10. (原文: http://www.wxpython.org/docs/api/wx.BoxSizer-class.html)

   实例1:

  1. def __init__(selfparent):  
  2.         wx.Panel.__init__(selfparent, -1, wx.DefaultPosition, wx.DefaultSize)  
  3.           
  4.         wred wx.TextCtrl(selfwx.NewId())  
  5.         wwhite wx.TextCtrl(selfwx.NewId())  
  6.         wblue wx.TextCtrl(selfwx.NewId())  
  7.         wcyan wx.TextCtrl(selfwx.NewId())  
  8.         b1 wx.Button(selfwx.NewId(), '&OK')  
  9.         b2 wx.Button(selfwx.NewId(), '&Canel')  
  10.         st wx.StaticText(self-1, 'new flexgridsizer')  
  11.           
  12.         """hgap, vgap 0, 0 
  13.         nrows, ncols 2, 3 
  14.         fgs wx.FlexGridSizer(nrows, ncols, hgap, vgap) 
  15.          
  16.         5 
  17.         fgs.AddMany([(wred, 1, wx.EXPAND wx.ALL, b), 
  18.                      (wwhite, 1, wx.EXPAND wx.ALL, b), 
  19.                      (wblue, 1, wx.EXPAND wx.ALL, b), 
  20.                      (wcyan, 1, wx.EXPAND wx.ALL,b), 
  21.                      (b1, 0, wx.ALIGN_RIGHT), 
  22.                      (b2, 0, wx.ALIGN_LEFT wx.LEFT, b), 
  23.                      ]) 
  24.         fgs.AddGrowableRow(0) 
  25.         fgs.AddGrowableRow(1) 
  26.         fgs.AddGrowableCol(0) 
  27.         fgs.AddGrowableCol(1) 
  28.         fgs.AddGrowableCol(2)"""  
  29.           
  30.          
  31.         hsizer1 wx.BoxSizer(wx.HORIZONTAL)  
  32.         hsizer1.Add(wred, 0, wx.ALL, b)  
  33.         hsizer1.Add((-1, -1), 1)  
  34.         hsizer1.Add(wwhite, 0, wx.ALL, b)  
  35.         hsizer1.Add((-1, -1), 1)  
  36.         hsizer1.Add(wblue, 0, wx.ALL, b)  
  37.           
  38.         vsizer1 wx.BoxSizer(wx.VERTICAL)  
  39.         vsizer1.Add(wcyan, 0, wx.ALL, b)  
  40.         vsizer1.SetItemMinSize(wcyan, (100, 200)) 设置widgets min size  
  41.         vsizer1.Add((-1, -1), 1)  
  42.         vsizer1.Add(b1, 0, wx.ALL, b)  
  43.         vsizer1.Add((-1, -1), 1)  
  44.         vsizer1.Add(b2, 0, wx.ALL, b)  
  45.           
  46.         hgap, vgap 0,  
  47.         nrows, ncols 2,  
  48.         fgs wx.FlexGridSizer(nrows, ncols, hgap, vgap)  
  49.           
  50.         =5  
  51.         fgs.AddMany([(vsizer1, 1, wx.EXPAND wx.ALL, b),  
  52.                      (st, 1, wx.EXPAND wx.ALL, b),  
  53.                      ((-1, -1), 1, wx.EXPAND wx.ALL, b),  
  54.                      (hsizer1, 1, wx.EXPAND wx.ALL, b),  
  55.                      ])  
  56.         fgs.AddGrowableRow(0) 第1行扩展  
  57.         fgs.AddGrowableCol(1) 第2列扩展      
  58.           
  59.           
  60.         self.SetSizer(fgs)  


 Note: 其中使用到了wx.BoxSizer()与wx.FlexGridSizer()的结合.

 

3. wx.GridBagSizer()该类是wx.FlexGridSizer()的子类,它具有其父类的方法与属性,当然,它使用时比其父类更简单了。它不需要指定特定的行数与列数,完整根据它所管理的构件设置具体而定的。

原型:

 
  1. #构造函数  
  2. __init__(selfvgap=0, hgap=0)  
  3. (Constructor)  
  4.   
  5. Constructor, with optional parameters to specify the gap between the rows and columns.  
  6.   
  7.     Parameters:  
  8.         vgap  
  9.                    (type=int 
  10.   
  11.         hgap  
  12.                    (type=int 
  13.   
  14. #添加单个构件到boxsizer  
  15. pos 表示的单元格的点(cell position可以看做是坐标)  
  16. span 表示的单个或合并的单元格  
  17. Add(selfitem, pos, span=DefaultSpan, flag=0, border=0, userData=None)  
  18.   
  19. Adds an item to the sizer at the grid cell pos, optionally spanning more than one row or column as specified with span. The remaining args behave similarly to wx.Sizer.Add.  
  20.   
  21. Returns True if the item was successfully placed at the given cell position, False if something was already there.  
  22.   
  23.     Parameters:  
  24.         pos  
  25.                    (type=GBPosition)  
  26.   
  27.         span  
  28.                    (type=GBSpan)  
  29.   
  30.         flag  
  31.                    (type=int 
  32.   
  33.         border  
  34.                    (type=int 
  35.  
  36.  
  37.  
  38. (原文: http://www.wxpython.org/docs/api/wx.GridBagSizer-class.html)  

实例3:

 
  1. def __init__(self, parent):  
  2.         wx.Panel.__init__(self, parent, -1wx.DefaultPosition, wx.DefaultSize)  
  3.         wred wx.TextCtrl(self, wx.NewId(), 'red')  
  4.         wwhite wx.TextCtrl(self, wx.NewId(), 'white')  
  5.         wblue wx.TextCtrl(self, wx.NewId())  
  6.         wcyan wx.TextCtrl(self, wx.NewId())  
  7.           
  8.         vgap, hgap 1020  
  9.         gbs wx.GridBagSizer(vgap, hgap)  
  10.           
  11.         0  
  12.         Add(self, item, pos, span=DefaultSpan, flag=0border=0userData=None)  
  13.         pos (type=GBPosition) cell position  
  14.         span(type=GBSPan)   
  15.         gbs.Add(wred, (11), (11), wx.EXPAND wx.ALL, b)  
  16.         gbs.Add(wwhite, (23), (11), wx.EXPAND wx.ALL, b)  
  17.         gbs.Add(wblue, (10), (11), wx.EXPAND wx.ALL, b)  
  18.         gbs.Add(wcyan, (00), (11), wx.EXPAND wx.ALL, b)  
  19.           
  20.         gbs.AddGrowableRow(00/1/2...表示的行号或列号  
  21.         gbs.AddGrowableRow(1 
  22.         gbs.AddGrowableRow(2 
  23.         gbs.AddGrowableCol(0 
  24.         gbs.AddGrowableCol(1 
  25.         gbs.AddGrowableCol(3 
  26.           
  27.         self.SetSizer(gbs)  

Note: 实例3中就表示形成了一个三行四列的虚拟表格(如果再添加一个gbs.Add(item, (4, 6), (1, 1) ....)那么它就是五行七列的).AddGrowableRow()与AddGrowable()表示指定的idx行或指定的idx列伸缩.


4. wx.StaticBoxSizer() 此使用方法与wx.BoxSizer()基本相同,就不多说。

    (原型: http://www.wxpython.org/docs/api/wx.StaticBoxSizer-class.html)


总结: wxPython进行布局定位,我现在就学习了这四种方法,至于其他的方法,以后学习了再补充完整。在实际的运用中,不能单靠某一种方法,往往是多种方法配合使用,才能发挥所长,使代码更简洁,界面更美观等等.以上纯属个人观点,有些说法或写法不准确之处,还望指教,多谢!

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值