`
purpen
  • 浏览: 796665 次
  • 性别: 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实现Frame界面的跳转

    本教程将详细探讨如何使用wxPython实现Frame界面的跳转。 首先,我们需要了解`wx.Frame`。它是wxPython中的一个核心类,用于创建应用程序的主窗口或子窗口。每个`wx.Frame`都可以包含多个其他控件,如按钮、文本框...

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

    WxPython还提供了许多其他特性,如各种控件(按钮、文本框等)、事件处理、布局管理等,可以帮助开发者构建复杂而美观的GUI应用。对于更深入的学习,可以参考提供的相关链接,这些链接包含更多WxPython的使用方法和...

    wxPython-demo-4.0.3.tar:wxPython官方demo

    4. **对话框和框架**:wxPython提供了多种对话框(如OpenFileDialog、SaveFileDialog)和框架(如Frame、Panel),用于实现更复杂的用户交互,如文件操作、输入验证等。 5. **高级特性**:除了基本功能外,wxPython...

    wxpython中文文档(极好查询学习)

    理解这些变量的含义和用法是构建界面的基础,例如`wx.Frame`表示一个顶级窗口,`wx.Button`则是创建按钮的类。 “API”(应用程序编程接口)是wxPython的核心部分,提供了大量的方法和函数供开发者调用。API涵盖了...

    wxPython多个窗口的基本结构

    wxPython中一个应用程序通常会有一个或多个Frame类的实例,每个实例都代表一个窗口。 在给定的示例代码中,我们看到如何定义一个wx.Frame的子类来创建一个窗口。在MyFrame类的构造函数中,调用了wx.Frame.__init__...

    wxpython的一些实例

    3. **创建应用程序框架**: 创建一个WxPython应用,首先要创建一个`App`对象,它是整个应用程序的起点。 ```python app = wx.App() ``` 4. **创建窗口**: WxPython中的窗口由`Frame`类表示。创建一个基本窗口: ...

    wxPython Demo

    3. **框架(Frame)和面板(Panel)**:框架是wxPython中的顶级窗口,通常包含一个或多个面板。面板则常被用作容器,用于组织和布局控件。 4. **布局管理器**:为了使界面在不同平台上看起来一致,wxPython提供了...

    wxPython and PyOpengl源码

    首先,你需要创建一个wxPython的框架(Frame)并在其中添加一个窗体(Panel)。然后,利用PyOpenGL的GLCanvas类创建一个OpenGL画布,这个画布将在Panel上显示3D内容。在窗体的大小调整事件中,你需要更新GLCanvas的...

    wxPython中文教程.doc

    【wxPython】是一个基于Python语言的图形用户界面(GUI)工具包,它使用原生的窗口系统来构建应用程序,提供了一种跨平台的方式...教程中的实例和详细解释对于理解wxPython的用法非常有帮助,是学习过程中的宝贵资源。

    wxpython_api手册

    **wxPython API手册详解** ...综上所述,wxPython API手册是学习和使用wxPython开发GUI应用的重要参考资料,它详细介绍了wxPython的各种组件、事件处理机制以及最佳实践,为开发者提供了丰富的工具和指导。

    wxpython tutorial 教程

    4. wx.Frame类:讲解了wxPython中的框架窗口类wx.Frame的使用,包括窗口样式的常量、成员函数以及事件绑定器。 5. wx.Panel类:介绍了面板类wx.Panel在GUI设计中的应用。 6. GUI构建工具:探讨了使用GUI构建工具...

    wxPython4.0 api && doc

    在“wxPython3.doc”、“wxPython1.doc”、“wxPython2.doc”和“wxPython”这些文件中,你将找到详细的API参考和教程。API文档将列出所有可用的类、方法和属性,而教程则可能逐步引导你完成从创建第一个窗口到构建...

    wxPython开发参考书籍

    **一、什么是 wxPython** wxPython 是一个 Python 模块,它为 Python 程序员提供了与操作系统用户界面(GUI)进行交互的能力。它是基于跨平台的 wxWidgets 库,使得开发者可以用 Python 来创建原生外观的应用程序,...

    Part1 wxPython入门

    - **简介**:wxPython是一种广泛使用的Python库,它允许开发者利用wxWidgets C++库来创建跨平台的图形用户界面(GUI)。wxPython是免费且开源的,支持Windows、Mac OS X和Linux等操作系统。 #### 1.1 开始wxPython ...

    python3+wxpython编程教程

    wxPython提供了一系列的GUI组件,包括但不限于窗口、控件、事件处理和布局管理等。通过这些组件,开发者可以构建出功能丰富、交互性强的应用程序界面。 #### 窗口 wxPython中的窗口主要通过wx.Frame类来创建。它...

    学习wxpython开发图形界面

    `wxPython` 是一个强大的工具包,用于在 Python 中开发图形用户界面(GUI)。它基于流行的 `wxWidgets` 库,该库是跨平台的,支持 Windows、Mac OS X 和 Linux 等操作系统。利用 `wxPython`,开发者可以创建出与原生...

    wxPython-epydoc.rar_DEMO_wxpython

    总之,"wxPython-epydoc.rar_DEMO_wxpython" 是一个宝贵的资源,它不仅提供了一个实际的示例来展示wxPython的用法,还可能附带了详细的API文档,有助于开发者快速上手并精通wxPython库的使用。通过深入学习和实践,...

    wxpython 教程

    2. **wxPython库介绍**:wxPython库提供了丰富的控件和组件,如Button、TextCtrl、Panel、Frame等,用于构建应用程序。熟悉这些控件的属性、方法和事件处理机制是使用wxPython的关键。 3. **控件的创建和布局**:...

Global site tag (gtag.js) - Google Analytics