wxpython布局管理部件wx.boxsizer用法示例

发布时间:2020-12-28编辑:脚本学堂
有关wxpython中布局管理部件wx.boxsizer的用法,wx.boxsizer部件的方法参数,wx.boxsizer的几个例子,需要的朋友参考下。

专题教程:wxpython中文教程

例子,三个按钮每个都占一行并被放置在窗口顶部,同时这些按钮会随同窗口一起得到缩放。

代码:
 

复制代码 代码示例:

#!/usr/bin/python
#coding=utf-8

#wxboxsizer.py

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, (-1, -1),
                          wx.Size(250, 50))
        panel = wx.Panel(self, -1)
        box = wx.BoxSizer(wx.HORIZONTAL)
        box.Add(wx.Button(panel, -1, '按钮1'), 0)
        box.Add(wx.Button(panel, -1, '按钮2'), 2)
        box.Add(wx.Button(panel, -1, '按钮3'), 1)
        panel.SetSizer(box)
        self.Centre()

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'wxboxsizer.py')
        frame.Show()
        return True
   
app = MyApp(0)
app.MainLoop()
 

可以水平或垂直地摆放部件.
Box = wx.BoxSizer(integer orient)

这里的定位方式(orientation)可以是wx.VERTICAL或wx.HORIZONTAL.
往wx.BoxSizer中添加部件是通过Add() 方法完成的.

此方法的参数:
Add(wx.Window window, integer proportion=0, integer flag = 0,
    integer border = 0)

如图:
 

wxpython布局管理部件wx.boxsizer

图:wxboxsizer.py
比例(proportion)参数定义了添加部件在定义的定位方式方向上占据的空间比例.
假设有三个按钮,它们的比例值分别为0、1和2.
它们是添加到一个水平的wx.BoxSizer中的. 那么比例值0的按钮在sizer的宽度(水平大小)改变时,它不会变化(也就是说这个按钮的宽度一直保持不变).

比例值2的按钮一直会占据可用宽度的2/3,比例值1的按钮则一直会占据可用宽度的1/3.
而运用标志(flag)参数,可以对wx.BoxSizer中的部件进行更多的配置.

通过border参数,可以控制这些部件的边框(更准确地说是“外边距(padding)”),就是在部件之间添加一些像素的空白.
而为了应用边框参数,需要定义哪一边需要使用边框,可以在这些标志中选择:
wx.LEFT
wx.RIGHT
wx.BOTTOM
wx.TOP
wx.ALL
通过竖线 “|”操作符(operator),比如wx.LEFT | wx.BOTTOM,来联合使用这些标志.
如果使用wx.EXPAND标志,那么部件将占有sizer定位方向的竖直 (perpendicular) 方向上所有可用的空间.

最后,还能定义这些部件的排列方式,通过以下标志实现:
wx.ALIGN_LEFT
wx.ALIGN_RIGHT
wx.ALIGN_TOP
wx.ALIGN_BOTTOM
wx.ALIGN_CENTER_VERTICAL
wx.ALIGN_CENTER_HORIZONTAL
wx.ALIGN_CENTER

例子:
 

复制代码 代码示例:

#!/usr/bin/python
#coding=utf-8

#borders.py

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, (-1, -1),
                          wx.Size(450, 300))
       
        panel = wx.Panel(self, -1)
        box = wx.BoxSizer(wx.HORIZONTAL)
        box.Add(wx.Button(panel, -1, '按钮1'), 1, wx.ALL, 20)
        box.Add(wx.Button(panel, -1, '按钮2'), 0, wx.EXPAND)
        box.Add(wx.Button(panel, -1, '按钮3'), 0, wx.ALIGN_CENTER)
       
        panel.SetSizer(box)
        self.Centre()

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'layout3.py')
        frame.Show(True)
        return True
   
app = MyApp(0)
app.MainLoop()
 

本例中有三个按钮. 在第一个按钮的四周有一些空白. 并且它是唯一在窗口缩放时会改变宽度的按钮.
第二个占据了垂直方向上分配给它的所有空间.

第三个是排列在中间的.
我们可以结合不同的wx.BoxSizer.

比如,可以将许多水平方向的wx.BoxSizer放入一个垂直方向的wx.BoxSizer,相反,也可以把许多垂直方向的wx.BoxSizer放入一个水平方向的wx.BoxSizer.
这样就可以生成相当复杂的布局了.

例子:
 

复制代码 代码示例:

#!/usr/bin/python
#coding=utf-8

#borders.py

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):       
        wx.Frame.__init__(self, parent, id, title)

        hbox = wx.BoxSizer(wx.HORIZONTAL)

        pnl1 = wx.Panel(self, -1, style=wx.SIMPLE_BORDER)
        pnl2 = wx.Panel(self, -1, style=wx.RAIsed_BORDER)
        pnl3 = wx.Panel(self, -1, style=wx.SUNKEN_BORDER)
        pnl4 = wx.Panel(self, -1, style=wx.NO_BORDER)

        hbox.Add(pnl1, 1, wx.EXPAND | wx.ALL, 3)
        hbox.Add(pnl2, 1, wx.EXPAND | wx.ALL, 3)
        hbox.Add(pnl3, 1, wx.EXPAND | wx.ALL, 3)
        hbox.Add(pnl4, 1, wx.EXPAND | wx.ALL, 3)
       
        self.SetSize((400, 120))
        self.SetSizer(hbox)
        self.Centre()
       
class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'borders.py')
        frame.Show(True)
        return True
   
app = MyApp(0)
app.MainLoop()
 

这里示出wxPython中4个不同的边框样式.
边框是一种简单的窗口装饰.

可用的边框有:
wx.SIMPLE_BORDER
wx.RAISED_BORDER
wx.SUNKEN_BORDER
wx.NO_BORDER

如图:
wxpython布局管理部件wx.boxsizer2图:borders.py