wxPython中文教程入门实例

发布时间:2019-11-26编辑:脚本学堂
分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下。
当窗口大小改变时,按纽的大小和位置并不改变。这是手工设置构件位置的一个主要特征。第二种方法是使用布局管理器。这是现实程序中比较流行的方法。基本上你要使用 sizer。我们将讨论:

* wx.BoxSizer
* wx.StaticBoxSizer
* wx.GridSizer
* wx.GridBagSizer
 
来写一个程序,它的窗口顶部的一行被三个按纽占据。这些按纽会随窗口的改变而改变。
#!/usr/bin/env python 
# FileName: 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, 'Button1' ), 1 ) 
box.Add( wx.Button( panel, -1, 'Button2' ), 1 ) 
box.Add( wx.Button( panel, -1, 'Button3' ), 1 ) 
 
panel.SetSizer(box) 
self.Centre() 
 
class MyApp(wx.App): 
def OnInit(self): 
frame = MyFrame( None, -1, 'wxboxsizer.py' ) 
frame.Show(True) 
return True 
 
app = MyApp(0) 
app.MainLoop() 
 
我既可水平的摆放构件,也可竖直的摆放。
box = wx.BoxSizer( integer orient )

其中的方向(orient)可以是 wx.VERTICAL 或 wx.HORIZONTAL。将构件加入 wx.BoxSizer 要使用 Add() 方法。为了理解,我们来看一下它的参数。
Add(wx.Window window,integer proportion=0,integer flag=0,integer border=0)

其中的 proportion 参数定义了在定义的方向上构件改变的比例。假设我们有三个按纽,它们的 proportion 属性分别为0、1和2。它们被加入一个水平的 wx.BoxSizer。proportion 参数为 0 的按纽根本不发生变化。而这个参数值为 2 的按纽在水平方向改变的程序将是参数值为 1 的那个按纽的两倍。

flag 参数可以更深入的设置构件的属性。我们可以控制构件之间的边框。我们可以在构件之间增加一些空白象素。在要使用边框的地方我们需要定义边界。我们可以使用 | 符号来连接它们。比如 wx.LEFT | wx.BOTTOM 。flag参数的值可以是:
* wx.LEFT
* wx.RIGHT
* wx.BOTTOM
* wx.TOP
* wx.ALL

如果我们使用 wx.EXPAND 标识,我们的构件将占据所有分配给它的空间。最后,我们还可以定义构件的对齐方式。有以下几种:
* 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 
# FileName: layout3.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, 'Button1' ), 1, wx.ALL, 5 ) 
box.Add( wx.Button( panel, -1, 'Button2' ), 0, wx.EXPAND ) 
box.Add( wx.Button( panel, -1, 'Button3' ), 0, wx.ALIGN_CENTER ) 
 
panel.SetSizer( box ) 
self.Center() 
 
class MyApp( wx.App ): 
def OnInit( self ): 
frame = MyFrame( None, -1, 'layout3.py' ) 
frame.Show( True ) 
return True 
 
app = My App( 0 ) 
app.MainLoop() 
 
这个例子中,我们仍旧是创建了三个按纽。第一个的周围有一些边界。它是唯一一个可以在水平方向改变大小的,当主窗口的大小改变时。第二个按纽占据了分配给它的所有空间。第三个在竖起方向据中对齐。

可以任意组合 wx.BoxSizer 。
例如,可以将几个水平的 wx.BoxSizer 放在一个竖起的 wx.BoxSizer 中或者相反。
这样就能产生复杂的布局。
#!/usr/bin/env python 
# FileName: borders.py 
import wx 
class MyFrame( wx.Frame ): 
def __init__( self, parent, id, title ): 
wx.Frame.__init__( self, parent, id, title ) 
 
vbox = wx.BoxSizer( wx.VERTICAL ) 
hbox1 = wx.BoxSizer( wx.HORIZONTAL ) 
hbox2 = 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.DOUBLE_BORDER ) 
pnl5 = wx.Panel( self, -1, style=wx.STATIC_BORDER ) 
pnl6 = wx.Panel( self, -1, style=wx.NO_BORDER ) 
 
hbox1.Add( pnl1, 1, wx.EXPAND | wx.ALL, 3 ) 
hbox1.Add( pnl2, 1, wx.EXPAND | wx.ALL, 3 ) 
hbox1.Add( pnl3, 1, wx.EXPAND | wx.ALL, 3 ) 
 
hbox2.Add( pnl4, 1, wx.EXPAND | wx.ALL, 3 ) 
hbox2.Add( pnl5, 1, wx.EXPAND | wx.ALL, 3 ) 
hbox2.Add( pnl6, 1, wx.EXPAND | wx.ALL, 3 ) 
 
vbox.Add( hbox1, 1, wx.EXPAND ) 
vbox.Add( hbox2, 1, wx.EXPAND ) 
 
self.SetSizer( vbox ) 
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() 
 
在这个例子中,我们创建了一个两行三列的表格。我们创建了一个竖直的 wx.BoxSizer 和两个水平的 wx.BoxSizer。我们只是简单的把两个水平的放进了那个竖直的中了。我们展示了六种可用的边框样式。边框是简单的窗口装饰品。注意其中两个边框样 式只能在 windows 上使用。