欢迎来到wxPython
下面是一个例子,它创建了一个有一个文本框的窗口用来显示鼠标的位置。
#!/bin/env python
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
panel = wx.Panel(self, -1)
panel.Bind(wx.EVT_MOTION, self.OnMove)
wx.StaticText(panel, -1, "Pos:", pos=(10, 12))
self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10))
def OnMove(self, event):
pos = event.GetPosition()
self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show(True)
app.MainLoop()
图示如下:
漂亮的界面是一个GUI程序必不可少的一部分,wxPython可以做到这一点,加之Python强大的功能和简洁的语法,使用得它在Python的gui中成为一种主流。
1.1 开始wxPython
首先我们创建一个显示一个图像的文件。这将分三步:
1、首先创建一个空的最小的可以工作的wxPthon程序
2、组织和细化
3、显示wxPython的logo
图示如下:
1.2 创建最小的空的wxPython程序
我们创建一个名为bare.py的程序并键入以下代码:
import wx #1
class App(wx.App): #2
def OnInit(self): #3
frame = wx.Frame(parent=None, title='Bare')
frame.Show()
return True
app = App() #4
app.MainLoop() #5
上面的代码运行的结果如下:
上面的代码的任何一行都不能少,否则将不能工作。这个基本的wxPython程序说明了开发任一wxPython程序所必须的五个基本步骤:
1、导入必须的wxPython包
2、子类化wxPython应用程序类
3、定义一个应用程序的初始化方法
4、创建一个应用程序类的实例
5、进入这个应用程序的主事件循环
下面让我们看看这个最小的空的程序是如何一步一步实现的。
1.2.1 导入wxPython
你需要做的第一件事就是导入这个主要的wxPython包,这个包名为wx:
import wx
一旦这个包被导入,你就可以引用wxPython的类、函数和常量(它们以wx为前缀),如下所示:
class App(wx.App):
注意:老的引入方式仍然被支持,你可能会遇到用这种老的引入方式的代码。因此我们将会简短地说明这种老的方式及为什么要改变它。老的包的名字是wxPython,它包含了一个内在的名为wx模块。那时,通常有两种导入必要的代码的方法,一种就是从wxPython包中导入wx模块:from wxPython import wx;另一种就是直接从wx模块中导入所有的东西:from wxPython.wx import *。这两种方法都有严重的缺点。这第二种方法Python中是不建议使用的,这因为可能导致名字空间冲突,而老的wx模块通过在其属性前加一个wx前缀避免了这个问题。尽管使用这个安全防范,但是import*仍然有可能导致问题,但是许多wxPython程序员喜欢这种类型,并且你将在老的代码中经常看到这种用法。这种风格的坏处是类名以小写字母开头,而大多数wxPython方法以大写字母开头,这和通常的Python编写程序的习惯相反。
然而如果你试图避免由于使用import*导致的名字空间膨胀,而使用from wxPython import wx。那么你就不得不为每个类、函数、常数名键入两次wx,一次是作为包的前缀,另一次是作为通常的前缀,例如wx.wxWindow。
对于导入顺序需要注意的是:你从wxPython导入其它东西之前必须先导入wx。通常情况下,Python中的模块导入顺序无关。但是wxPython中的不同,它是一个复杂的模块。当你第一次导入wx模块时,wxPython要对别的wxPython模块执行一些初始化工作。例如wxPython中的一些子包,如xrc模块,它在wx模块导入之前不能够正确的工作,我们必须按下面顺序导入:
import wx
from wx import xrc
以上的导入顺序只针对wxPython的模块,Python的模块导入顺序没关系。例如:
import sys
import wx
import os
from wx import xrc
import urllib
原文地址:http://www.pythontik.com/blog/article.asp?id=177