这里会介绍如何创建python程序的图像用户界面(GUI),也就是那些带有按钮和文本框的窗口等。目前支持python的所谓“GUI工具包”的有很多,本文简要介绍最成熟的跨平台pythonGUI工具包---wxPython。
一. 下载和安装wxPython
1.1 下载
访问下载页面:http://wxpython.org/download.php即可。
要注意以下几点:
1. 如果是windows系统,应该下载预建的二进制版本,可以选择支持Unicode或不支持Unicode,除非一定要用到Unicode,否则2个版本的区别不大;
2. 确保所选择的二进制版本要对应Python版本,比如python2.3对应的wxpython不能用于python2.4;
3. 如果没有任何版本适合硬件或操作系统,可以下载源代码发布版;
4. 在下载了wxpyhton之后,强烈建议下载演示版本(demo,它需要独立安装),它包含文档,示例程序和非常详细的演示分布。
1.2 安装
安装过程很简单,都是自动完成的,一直点“continue”就好了。
安装完毕之后,建议重新打开IDLE窗口,否则验证安装是否成功时会一直提示如下错误:
>>> import wx Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named wx
ps:LZ我就是在安装完之后,忘记重启IDLE窗口,导致import wx时一直提示这个错误,以为安装失败了。
导入wx模块成功的话,不会有其他提示。如下是我的wxPython安装目录,请拖到最后查看,最后一个目录为:'C:\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode':
>>> import sys >>> print sys.path ['D:/python', 'C:\\Python27\\Lib\\idlelib', 'C:\\Python27\\Lib\\site-packages\\wx-2.8-msw-unicode\\wxPython', 'C:\\Python27\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode'] >>> import wx >>>
正如前面一章《模块和包》中讲到的,sys.path中的内容就是告诉解释器去哪里找模块。现在wx在sys.path路径下,证明wx已经被python识别为一个模块,可以正常使用了。
二.使用
在学习的过程中,我发现一个很好的能够学习wxPython的网站,跟大家分享一下:http://wiki.woodpecker.org.cn/moin/WxPythonInAction
这里介绍里面讲到的一个最基本的wxPython程序:
import wx #导入wxPython包;(必须的步骤) class Frame(wx.Frame): # 定义一个wx.Frame的子类,以便我们更容易控制框架的内容和外观; def __init__(self,image,parent = None,id = -1, pos = wx.DefaultPosition, title = 'Hello,wxPython!'): #给框架的构造器增加一个图像参数,后面的应用程序会提供;
#下面是显示图像的步骤: temp = image.ConvertToBitmap() size = temp.GetWidth(),temp.GetHeight() wx.Frame.__init__(self, parent, id, title, pos, size) self.bmp = wx.StaticBitmap(parent = self,bitmap = temp) class App(wx.App): #定义一个带有OnInit()方法的wx.App的子类,这是wxpython应用程序最基本的要求;(必须的步骤) def OnInit(self): (必须的步骤)
#下面是对图像的处理: image = wx.Image('D:\\python\\wxpython.jpg',wx.BITMAP_TYPE_JPEG) self.frame = Frame(image) self.frame.Show() self.SetTopWindow(self.frame) return True myapp = App() #创建一个应用程序类的实例;(必须的步骤) myapp.MainLoop() #进入这个应用程序的主事件循环;(必须的步骤)
ps:LZ我也才入门wxpython,暂时也就只能分享到这里了。