wxPython frame的布局详细解释(二)

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

原型:

 
  1. #构造函数  
  2. __init__(self, vgap=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(self, item, 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, -1, wx.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.         b = 0  
  12.         # Add(self, item, pos, span=DefaultSpan, flag=0, border=0, userData=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(0) # 0/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进行布局定位,我现在就学习了这四种方法,至于其他的方法,以后学习了再补充完整。在实际的运用中,不能单靠某一种方法,往往是多种方法配合使用,才能发挥所长,使代码更简洁,界面更美观等等.以上纯属个人观点,有些说法或写法不准确之处,还望指教,多谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wxPython布局是一种用于创建GUI界面的布局方式。主要有四种布局方式:Box布局、StaticBox布局、Grid布局和FlexGrid布局。其中,Box布局是基于水平或垂直方向排列组件的简单布局方式。StaticBox布局在Box布局的基础上添加了一个静态框作为容器,用于将相关组件组合在一起。Grid布局是将组件排列在网格中的布局方式,可以指定每个组件在网格中的位置和占用的行列数。FlexGrid布局是一种灵活的网格布局方式,可以指定每个组件在网格中的位置和占用的行列数,并可以动态调整行列的大小。 在wxPython中,可以使用相应的布局类来创建布局管理器,然后将组件添加到布局管理器中,最后将布局管理器设置给面板或窗口对象。通过指定组件在布局管理器中的位置和占用的行列数,可以实现灵活的布局效果。 以下是一个使用FlexGrid布局的示例代码: ```python import wx class MyFrame(wx.Frame): def __init__(self): super().__init__(parent=None, title="FlexGrid布局器", size=(400, 200)) self.Centre() panel = wx.Panel(parent=self) fgs = wx.FlexGridSizer(3, 2, 10, 10) title = wx.StaticText(panel, label='标题:') author = wx.StaticText(panel, label='作者:') review = wx.StaticText(panel, label='内容:') tcl = wx.TextCtrl(panel) tc2 = wx.TextCtrl(panel) tc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE) fgs.AddMany([ title, (tcl, 1, wx.EXPAND), author, (tc2, 1, wx.EXPAND), review, (tc3, 1, wx.EXPAND) ]) fgs.AddGrowableRow(0, 1) fgs.AddGrowableRow(1, 1) fgs.AddGrowableRow(2, 3) fgs.AddGrowableCol(0, 1) fgs.AddGrowableCol(1, 2) panel.SetSizer(fgs) class App(wx.App): def OnInit(self): frame = MyFrame() frame.Show() return True def OnExit(self): print('应用程序退出') return 0 if __name__ == '__main__': app = App() app.MainLoop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值