[python]
 view plaincopy
  1. #!/bin/env python  
  2. # -*- coding: utf-8 -*-   
  3.   
  4. #################################################################################  
  5. #这个测试程序有助于我们理解wxPython的界面设计,基本的控件和事件调用都有  
  6. #################################################################################  
  7. import wx  
  8.   
  9. class MyFrame(wx.Frame):  
  10.   
  11.     def __init__(self):  
  12.         wx.Frame.__init__(self, parent=None,title="My Test Frame",pos = (100,100), size=(500,450))  
  13.           
  14.         #添加第1个Panel面板  
  15.         panel1 = wx.Panel(parent=self,pos = (0,80), size=(225250))  
  16.         panel1.Bind(wx.EVT_MOTION,  self.OnPanel1Move)  
  17.         #添加其他控件  
  18.         wx.StaticText(parent=panel1, label= " Cursor Pos:", pos=(1010),size=(10025))  
  19.         self.posCtrl1 = wx.TextCtrl(parent=panel1, value = "0,0", pos=(10010),size=(10025))  
  20.           
  21.         #添加第2个Panel面板  
  22.         panel2 = wx.Panel(parent=self,pos = (275,80), size=(225250))  
  23.         #添加其他控件  
  24.         wx.StaticText(parent=panel2,label= " The Second Panel", pos=(1050),size=(15025))  
  25.         self.btn=wx.Button(parent=panel2,label= " My Button",pos=(10100),size=(15025))  
  26.         self.btn.Bind(wx.EVT_BUTTON,  self.OnMyButtonClick)  
  27.           
  28.         #添加wxStatusBar工具条  
  29.         self.sb=self.CreateStatusBar(number =3)  
  30.         self.SetStatusText("One",0)  
  31.         self.SetStatusText("Two",1)  
  32.         self.SetStatusText("Three",2)  
  33.   
  34.         #添加wxToolBar  
  35.         self.tb=self.CreateToolBar()  
  36.         bitmap1 = wx.EmptyBitmapRGBA(3224, red=0, green=0, blue=0, alpha=100)  
  37.         self.tb.AddSeparator()  
  38.         self.tb.AddLabelTool(1,'',bitmap1)  
  39.         self.tb.AddSeparator()  
  40.         bitmap2 = wx.EmptyBitmapRGBA(3224, red=0, green=0, blue=0, alpha=150)          
  41.         self.tb.AddLabelTool(2,'',bitmap2)          
  42.         self.tb.Realize()  
  43.           
  44.         #添加wxMenuBar菜单,提供了几种创建菜单的方式  
  45.         menubar = wx.MenuBar()  
  46.         #一级主菜单  
  47.         file = wx.Menu()  
  48.         file.Append(-1'&New')  
  49.         file.Append(-1'&Open')  
  50.         file.Append(-1'&Save')  
  51.         file.AppendSeparator()  
  52.         #多级子菜单  
  53.         imp = wx.Menu()   
  54.         imp.Append(-1'Import newsfeed list...')  
  55.         imp.Append(-1'Import bookmarks...')  
  56.         imp.Append(-1'Import mail...')  
  57.   
  58.         file.AppendMenu(-1'I&mport', imp)  
  59.         file.AppendSeparator()  
  60.         #再添加一个菜单  
  61.         quit = wx.MenuItem(file, wx.ID_CLOSE, '&Quit/tCtrl+W')  
  62.         self.Bind(wx.EVT_MENU, self.OnQuit, id=wx.ID_CLOSE) #绑定方法  
  63.         file.AppendItem(quit)  
  64.   
  65.         menubar.Append(file, '&File')  
  66.         self.SetMenuBar(menubar)  
  67.           
  68.         self.Centre() #居中显示  
  69.         self.Show(True)#总是一创建就显示Frame框架,  
  70.   
  71.   
  72.           
  73.         #定义事件方法  
  74.     def OnPanel1Move(self, event): #在Panel1上面移动的时调用  
  75.         pos = event.GetPosition()  
  76.         self.posCtrl1.SetValue("%s, %s" % (pos.x, pos.y))  
  77.           
  78.     def OnMyButtonClick(self,event): #在按钮上面单击调用  
  79.         self.btn.SetLabel("You Clicked!")  
  80.           
  81.     def OnQuit(self, event): #点击退出菜单时调用  
  82.         self.Close()  
  83.           
  84.           
  85. #################################################################################  
  86. if __name__ == '__main__':  
  87.     app = wx.App()  
  88.     frame = MyFrame()  
  89.     app.MainLoop()  
  90. #################################################################################  

运行结果:


根据上面的例子我们可以看出,建立编写wxPython界面的步骤

1、先导入必须的wxPython包,创建窗口

2、然后创建合适的按钮、文本框等组件

3、然后使用sizer调整组件的位置、大小、对齐方式等,

4、然后进入应用程序的主循环。


下面是再创建一GUI的简单实例

?
1
2
3
4
5
6
7
#!/usr/bin/env python
import wx
app=wx.App()
win=wx.Frame(None,title=hello,size=(500,300))
win.Show()
but=wx.Button(win,label=ok,pos=(200,100),size(50,20))
app.MainLoop()

Frame用于建立一个窗口,title和size分别制定标题和大小,Button用于建立一个按钮,MainLoop使程序进入事件处理循环。在制定按钮but大小时,使用了绝对坐标(200,100),它表示相对窗口左上角(200,100)的位置,然而在应用程序中,我们常常希望按钮的大小可以根据窗口自适应的改变,这时可以使用sizer,sizer本身并不是窗口,它的作用再用在于布局窗口中按钮。在创建应用程序时,Bind函数可以将按钮的动作与特定的函数绑定,当按钮上有动作时,这个函数就会启动,从而处理响应的事件。wxPython中的sizer可以分为Gridsizer(网格布局)Flex grid(对Grid做了改进,窗口部件可以有不同的尺寸)Grid bag(窗口部件可以更随意放置)Boxsizer(水平或者垂直的方向上布局组件)Staicboxsizer(带有标题和环线的Boxsizer)。Add函数的第一个参数指定要设置的组件,第二个参数设置组件缩放的比例(如果一个组件的proportion为1,而另外一个组件的proportion为2,在窗口的缩放中,它们的缩放的比例为1:2),第三个参数设置对齐方式。

下面是wxpython做的txt文本阅读器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python
import wx
def catfile(event):
    file=open(filename.GetValue(),'r')
    contents.SetValue(file.read())
    file.close()
 
app=wx.App()
win=wx.Frame(None,title=txt reader,size=(500,350))
bkg=wx.Panel(win)
catfileButton=wx.Button(bkg,label='Open')
catfileButton.Bind(wx.EVT_BUTTON,catfile)
 
filename=wx.TextCtrl(bkg)
contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)
 
hbox=wx.BoxSizer()
hbox.Add(filename,proportion=1,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=10)
hbox.Add(catfileButton,proportion=0,flag=wx.LEFT)
 
vbox=wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion=0,flag=wx.EXPAND|wx.ALL)
vbox.Add(contents,proportion=1,flag=wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT)
bkg.SetSizer(vbox)
win.Show()
app.MainLoop()

运行结果如图:

\