(三)Layout management in wxPython
一个wxpython应用是由多个widgets组成的 这些widgets在一个容器widgets里
有两种容器定位方式
(1) 绝对定位
(2) sizers
1 绝对定位
如果采用绝对定位 在重画窗口以后 widgets的位置和大小将不会变动
在不同平台上会有差别
改变应用的字体将会破坏layout
更换layout将会是一件很麻烦和单调的事情
下面一个比较例子
python 代码
-
-
-
-
-
- import wx
-
- class Absolute(wx.Frame):
- def __init__(self, parent, id, title):
-
- wx.Frame.__init__(self, parent, id, title, size=(250,180))
-
- panel = wx.Panel(self, -1)
-
- menubar = wx.MenuBar()
- file = wx.Menu()
- edit = wx.Menu()
- help = wx.Menu()
-
- menubar.Append(file, '&File')
- menubar.Append(edit, '&edit')
- menubar.Append(help, '&help')
-
- self.SetMenuBar(menubar)
-
- wx.TextCtrl(panel, -1, pos=(-1, -1), size=(250, 150))
-
- self.Centre()
- self.Show(True)
-
- app=wx.App(0)
- Absolute(None, -1, '')
- app.MainLoop()
得到以下两个窗口 后面一个是改变size以后的
2 使用sizers来定位
主要的sizers有以下几种
* wx.BoxSizer
* wx.StaticBoxSizer
* wx.GridSizer
* wx.FlexGridSizer
* wx.GridBagSizer
把上面的例子修改一下
python 代码
-
-
-
-
-
- import wx
-
- class Sizers(wx.Frame):
- def __init__(self, parent, id, title):
- wx.Frame.__init__(self, parent, id, title, size=(350,180))
-
-
-
- menubar = wx.MenuBar()
- file = wx.Menu()
- edit = wx.Menu()
- help = wx.Menu()
-
- menubar.Append(file, '&File')
- menubar.Append(edit, '&edit')
- menubar.Append(help, '&help')
-
- self.SetMenuBar(menubar)
-
-
-
- wx.TextCtrl(self, -1)
- self.Centre()
- self.Show(True)
-
- app=wx.App(0)
- Sizers(None, -1, '')
- app.MainLoop()
虽然没有使用sizers中的任何一种 但是wx.Frame有一个特别的内建的Sizer 我们可以把任何widgets放在wx.Frame里
都会自动的住进Frame的空间里 除了borders, menu, toolbar , statusbar
3 wx.BoxSizer
这个sizer是可以嵌套的 以此可以实现任何复杂的布局
box = wx.BoxSizer(integer orient)
box.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)