The wxPython Guide笔记3

(三)Layout management in wxPython
一个wxpython应用是由多个widgets组成的 这些widgets在一个容器widgets里
有两种容器定位方式
(1) 绝对定位
(2) sizers
1 绝对定位
如果采用绝对定位 在重画窗口以后 widgets的位置和大小将不会变动
在不同平台上会有差别
改变应用的字体将会破坏layout
更换layout将会是一件很麻烦和单调的事情
下面一个比较例子

python 代码
  1. #!/usr/bin/python
  2. # absolute.py
  3. import wx
  4. class Absolute(wx.Frame):
  5. def __init__(self, parent, id, title):
  6. #修改size参数 看效果 size=(350, 220)
  7. wx.Frame.__init__(self, parent, id, title, size=(250,180))
  8. #添加一个panel到Frame 放置Text
  9. panel = wx.Panel(self, -1)
  10. menubar = wx.MenuBar()
  11. file = wx.Menu()
  12. edit = wx.Menu()
  13. help = wx.Menu()
  14. menubar.Append(file, '&File')
  15. menubar.Append(edit, '&edit')
  16. menubar.Append(help, '&help')
  17. self.SetMenuBar(menubar)
  18. wx.TextCtrl(panel, -1, pos=(-1, -1), size=(250, 150))
  19. self.Centre()
  20. self.Show(True)
  21. app=wx.App(0)
  22. Absolute(None, -1, '')
  23. app.MainLoop()

得到以下两个窗口 后面一个是改变size以后的



2 使用sizers来定位

主要的sizers有以下几种
* wx.BoxSizer
* wx.StaticBoxSizer
* wx.GridSizer
* wx.FlexGridSizer
* wx.GridBagSizer
把上面的例子修改一下
python 代码
  1. #!/usr/bin/python
  2. # Sizers.py
  3. import wx
  4. class Sizers(wx.Frame):
  5. def __init__(self, parent, id, title):
  6. wx.Frame.__init__(self, parent, id, title, size=(350,180))
  7. #添加一个panel到Frame 放置Text
  8. #panel = wx.Panel(self, -1)
  9. menubar = wx.MenuBar()
  10. file = wx.Menu()
  11. edit = wx.Menu()
  12. help = wx.Menu()
  13. menubar.Append(file, '&File')
  14. menubar.Append(edit, '&edit')
  15. menubar.Append(help, '&help')
  16. self.SetMenuBar(menubar)
  17. #wx.TextCtrl(panel, -1, pos=(-1, -1), size=(250, 150))
  18. wx.TextCtrl(self, -1)
  19. self.Centre()
  20. self.Show(True)
  21. app=wx.App(0)
  22. Sizers(None, -1, '')
  23. 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)

你可能感兴趣的:(python,wxPython)