wx佈局管理boxsizer

布局管理layout management — wx.BoxSizer

下面我们将编写一个程序,令三个按钮每个都占一行并被放置在窗口顶部. 同时这些按钮会随同窗口一起得到缩放.[more…]

#!/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)
f-07

图: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
f-08

图:borders.py

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值