`
purpen
  • 浏览: 787554 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

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

     原型:

 
  1. wx.BoxSizer.__init__(self, orient)  
  2.   
  3. sizer = wx.BoxSizer(wx.HORIZONTAL)   #创建一个水平方向的box ; wx.VERTICAL ,垂直方向的box  

   它还有以下常用到的方法:

 
  1. Add(self, item, proportion, flag, border, userData)  
  2. Insert(self, before, item, proportion, flag, border, userData, realIndex)  
  3. Layout(self)  
  4. Prepend(self, item, proportion, flag, border, userData)  
  5. Remove(self, indx, pop)  
  6. Show(self, item, show) 
  7. .
  8. .
  9. .
  10. (原文: http://www.wxpython.org/docs/api/wx.BoxSizer-class.html)

   实例1:

 
  1. def __init__(self, parent):  
  2.         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)  
  3.           
  4.         b = 5  
  5.         vsizer1 = wx.BoxSizer(orient=wx.VERTICAL)  
  6.         wbtn1 = wx.Button(self, -1, 'Botton1')  
  7.         wbtn2 = wx.Button(self, -1, 'Botton2')   
  8.         vsizer1.Add(item=wbtn1, proportion=1, flag=wx.EXPAND|wx.ALL, border=b)  
  9.         vsizer1.Add(wbtn2, 0, wx.ALIGN_CENTER | wx.ALL, b)
  10.         # wx.ALIGN_LEFT, wx.ALIGN_RIGHT  
  11.         self.SetSizer(vsizer1)  

这里需要说明的参数: proportion表示的wbtn1所占vsizer1垂直方向的比例;flag表示的wbtn1是怎样定位的(包括对齐方式、边框有无、是否扩展、是否拉伸等等),个人认为,定位主要体现在这两个参数的设置。(以下的几种方式的参数与此类同)

2. wx.FlexGridSizer()主要用于规则的排列构件时使用的(eg:Execel)

原型:

  1. #构造函数 
  2. # rows/cols表示构成的行数与列数,vgap/hgap表示管理构件时垂直与水平之间的间隔。
  3. __init__(self, rows=1, cols=0, vgap=0, hgap=0)  
  4. (Constructor)  
  5.   
  6. Constructor for a wx.FlexGridSizer. rows and cols determine the number of columns and rows in the sizer - if either of the parameters is zero, it will be calculated to from the total number of children in the sizer, thus making the sizer grow dynamically. vgap and hgap define extra space between all children.  
  7.   
  8.     Parameters:  
  9.         rows  
  10.                    (type=int)  
  11.   
  12.         cols  
  13.                    (type=int)  
  14.   
  15.         vgap  
  16.                    (type=int)  
  17.   
  18.         hgap  
  19.                    (type=int)  
  20.   
  21. #添加多个构件到boxsizer方法  
  22.   
  23. AddMany(selfitems)  
  24.   
  25. AddMany is a convenience method for adding several items to a sizer at one time. Simply pass it a list of tuples, where each tuple consists of the parameters that you would normally pass to the Add method.  
  26.   
  27. #控件伸缩扩展方法(idx即指定的行号与列号..)  
  28.   
  29. AddGrowableCol(self, idx, proportion=0)  
  30.   
  31. Specifies that column idx (starting from zero) should be grown if there is extra space available to the sizer.  
  32.   
  33. The proportion parameter has the same meaning as the stretch factor for the box sizers except that if all proportions are 0, then all columns are resized equally (instead of not being resized at all).  
  34.   
  35.     Parameters:  
  36.         idx  
  37.                    (type=size_t)  
  38.   
  39.         proportion  
  40.                    (type=int)  
  41.   
  42. AddGrowableRow(self, idx, proportion=0)  
  43.   
  44. Specifies that row idx (starting from zero) should be grown if there is extra space available to the sizer.  
  45.   
  46. The proportion parameter has the same meaning as the stretch factor for the box sizers except that if all proportions are 0, then all columns are resized equally (instead of not being resized at all).  
  47.   
  48.     Parameters:  
  49.         idx  
  50.                    (type=size_t)  
  51.   
  52.         proportion  
  53.                    (type=int

实例2:

 
  1. def __init__(self, parent):  
  2.         wx.Panel.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize)  
  3.           
  4.         wred = wx.TextCtrl(self, wx.NewId())  
  5.         wwhite = wx.TextCtrl(self, wx.NewId())  
  6.         wblue = wx.TextCtrl(self, wx.NewId())  
  7.         wcyan = wx.TextCtrl(self, wx.NewId())  
  8.         b1 = wx.Button(self, wx.NewId(), '&OK')  
  9.         b2 = wx.Button(self, wx.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.         b = 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.         b = 0  
  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, 0  
  47.         nrows, ncols = 2, 2  
  48.         fgs = wx.FlexGridSizer(nrows, ncols, hgap, vgap)  
  49.           
  50.         b =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()的结合.
 

   
分享到:
评论

相关推荐

    wxPython窗口布局技术大全

    wxPython窗口布局技术大全。。。 提供10种布局技巧!!

    wxPython实现Frame界面的跳转

    wxPython实现Frame界面的跳转,详细说明见:http://blog.csdn.net/tianmaxingkong_/article/details/53326463

    python用WxPython库实现无边框窗体和透明窗体实现方法详解

    wxPython是Python语言的一套优秀的GUI图形库。允许Python程序员很方便的创建完整的、功能键全的GUI用户界面。 wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。 下面的2个...

    wxpython简单界面布局设计

    这个测试程序有助于我们理解wxPython的界面设计,基本的控件和事件调用都有,这个代码可以让初学者了解,界面的设计过程。建议观看……

    wxpython背景

    1) 背景图片 要求 Bitmap格式; 所以在代码里 要 用到 ConvertToBitmap()函数 2) 设置背景图片, 实际就是 调用 wx.StaticBitmap()函数; 参数要求为: Help on method __init__ in module wx._controls:

    wxpython中文教程wxpython中文教程

    wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程

    wxPython几本好书

    几本很不错的关于python gui的wxPython的书,包括“wxPython in Action(中文版)” 活学活用wxPython “《wxPython in Action》Noel Rappin, Robin Dunn著 2006年版”

    wxpython绘制圆角窗体

    本文实例为大家分享了wxpython绘制圆角窗体的具体代码,供大家参考,具体内容如下 # -*- coding:gbk -*- import wx class RCDialog(wx.Dialog): def __init__(self,parent=None,size=wx.DefaultSize): wx.Dialog....

    python2.4 and wxPython

    python2.4相对应的wxPython,还有很多库,一次性下载,不用费心去找了。

    wxPython教程

    第一节:第一个wxPython应用程序…………………8 第二节:认识基本的控件………………………………15 第三节:认识事件………………………………………23 第四节:控件的进一步了解……………………………30 第五节...

    wxPython演示

    就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够支持运行在32位windows、绝大多数的Unix或类Unix系统、Macintosh OS X下 这个是使用于windows下 的

    Python 的WxPython库开源扫雷游戏

    并将所有图像放大一倍,以适合新的计算机的分辨率。并使用了没有边框的BitMapButton。Python WxPython开源扫雷游戏PyMine新版1.4有少量API修改,并移植至Python 3.6和wxPython 4.0.3。本例为开源扫雷游戏PyMine 使用...

    2014年辛星wxPython教程第一版.pdf

    2014年辛星wxPython教程第一版.pdf

    Python实例之wxpython中Frame使用方法

    本节为大家分享的例子是wxpython Frame的用法。 例子: 复制代码 代码如下:#!/usr/bin/python # -*- coding: GBK -*- # simple.py import wx app = wx.App() frame = wx.Frame(None) frame.Show() app....

    wxPython开发参考书籍

    wxPython开发参考书籍

    wxpython for py2.6

    wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 和...

    wxpython api

    wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。  ...

    学习wxpython开发图形界面

    wxpython 学习wxpython开发图形界面

    wxpython grid.docx

    wxpython grid使用部分

Global site tag (gtag.js) - Google Analytics