2014年辛星wxPython教程第一版

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2014年辛星wxPython教程第一版1/1102014年辛星wxPython教程第一版说明:如果您在两年后看到了本教程,那么大可以丢弃它,因为肯定有更新的版本出现了。建议:百度搜索“辛星wxPython”或者“辛星Python”,您将会看到更多。特色:时刻保持内容最新最全面,最贴心。版权:由于部分内容参考了互联网上的一些资料,但是绝对不存在抄袭部分,版权归辛星本人所有。如果想联系我请发送邮件至xinguimeng@163.com。特色:更新更全更实用前进的道路,辛星陪伴您。只要星哥在,编程充满爱。2014年辛星wxPython教程第一版2/110前言………………………………………………………3第零节:wxPython简介以及开发环境设置…………5第一节:第一个wxPython应用程序…………………8第二节:认识基本的控件………………………………15第三节:认识事件………………………………………23第四节:控件的进一步了解……………………………30第五节:菜单和状态栏…………………………………47第六节:布局……………………………………………63第七节:手工绘制………………………………………79第八节:图像的处理……………………………………87第九节:对话框…………………………………………93第十节:中文显示问题的解决以及总结………………1072014年辛星wxPython教程第一版3/110前言**************GUI**************1.GUI是GraphicalUserInterface的缩写,它可以翻译为图形用户界面,它最显著的特点就是区分于无界面的控制台应用程序。2.Python作为一种“胶水语言”,并没有使用Python语言开发的界面库,但是却有数量众多的GUI开发库的绑定,它们大多是用其他语言编写,来提高响应速度。3.如果说是桌面应用上的带有界面的应用程序,那么编译型语言无疑会响应速度更快,但是说到开发效率,就远远的落在解释型语言后面了。*************Python的界面库*************1.Python标准库中有一个界面库,就是tkinter,它使用tcl语言编写,有Python绑定,我已经写了两个版本的tkinter教程,其中第二版有几个典型的小应用程序。2.说到Python可用的界面库,主流的也就是tkinter,wxPython,pyQt,PyGTK等等,它们大多数是用C或者C++开发来保证运行速度,它们有自己的Python绑定。3.本教程介绍wxPython,之前我也了解过Qt,有机会给大家写一个pyQt的教程,敬请您的期待。**************wxPythonvstkinter***********1.要说wxPython和tkinter有什么不同,那么最大的不同就是它们两个的界面风格差别巨大。2014年辛星wxPython教程第一版4/1102.我们同样是创建一个窗口,且该窗口的标题是‘xinxing’字样,而且创建一个按钮,按钮的文本显示是‘Xin’,下面是两者的效果对比:3.下面是两者的编写代码对比:4.我的观点就是:Tkinter适合小型和微型程序,wxPython适合小型和中型程序,两者都不适合开发大型程序,因为很重要的一点就是脚本本身的弊端,大型程序的运行效率得不到提高,毕竟我们编写的不是数据分析和网络通信,是GUI程序。而且,脚本语言对GUI程序的底层控制能力不够强,还需要其他语言去写底层。2014年辛星wxPython教程第一版5/110第零节:wxPython简介以及开发环境设置***********wxWidgets***************1.wxPython并不是使用Python开发的,它是另一个类库的Python绑定,该类库是wxWidgets,它使用C++开发。2.wxWidgets最开始由爱丁堡大学的人工智能应用学院开发,在1992年首次发布(那年正好我出生,好巧)。3.wxWidgets是一个跨平台的界面库,而且和MFC很类似,很重要的一点就是它是一个免费的界面库,不管是个人还是商业用途。**************wxPython******************1.wxPython第一个比较现代的版本是在1998年发布的,通过它我们尅建立一个完整的、功能健全的GUI应用。2.wxPython也是开源的,且是跨平台的,大致我就说这么多把。*************版本问题**************1.由于wxPython尚不支持Python3,我也没办法,于是我就下载了Python2,下载的是最新的Python2.7.8.2.而我使用的wxPython也是今天下载的最新的版本,版本号是3.0.3.如果大家和我的版本不一样,也不要害怕,大部分内容都很相似,不过我希望大家在读该教程的时候可以照着代码敲一遍,这样可以确定版本的兼容性。4.安装wxPython的时候需要根据对应的Python版本下载,否则可能会导致安装或者运行时错误。***************开发环境*************2014年辛星wxPython教程第一版6/1101.首先需要安装Python开发环境,我这里安装的是Python2.7.8(今天下载的最新版),我相信大家都有自己喜欢的Python版本,就不废话了,给个我的截图:2.然后我们到去下载相应的wxPython安装程序,下载之后的截图:3.安装软件的过程我就不说了,在windows下安装应用软件都是傻瓜式的安装,我一般喜欢用默认的安装方式,这样方便和其他人交流。下面给一个上面网站的截图把:2014年辛星wxPython教程第一版7/1104.在安装完成之后,打开PythonShell,输入如下代码,如果读者和我的反应是一样的,说明安装成功,如果只是版本号不一样,可以忽略,如果导入wx模块失败,则需要重新安装:5.如果大家安装了Python的其他版本,那么需要更改一下.py文件的默认打开方式,我想这一点大家应该会,就不说了。****************编辑器的选择*************1.每个程序员都有自己喜欢的代码编辑器,我也先后用过vim,Editplus,Notepad++,现在比较喜欢的是Sublime。2.下面我的截图使用的代码编辑器都是出自Sublime.2014年辛星wxPython教程第一版8/110第一节:第一个wxPython应用程序****************代码编写*******************1.打开自己喜欢的文本编辑器,在其中书写代码如下:2.然后运行截图如下:**************代码解读*************2014年辛星wxPython教程第一版9/1101.上面只有四行代码,当然写出来的应用程序也没有任何的实际价值,它只是创建了一个窗口,并且把窗口的标题设置为“xinxing”。2.第一行importwx是导入了wx模块,我不建议大家导入该模块的命名空间,而是建议上面的导入方式。3.第二行是wx模块的App类的实例化,它表示了一个应用程序的实例,任何wxPython应用程序都需要一个应用程序对象,这个对象管理幕后的主事件循环,如果没有实例化任何一个应用程序对象,那么我们的图形对象无法创建。4.第三行是wx模块的Frame类的实例化,它可以接收一些参数,我们这里指定的其中两个是parent,表示的父窗口,这里它没有父窗口,那么它是一个顶层窗口,而title属性大家也看到了,就表示窗口的标题。Frame是所有窗口类的父类,它包含很多子类,我们后面将会学习他们之中的一部分。5.第四行是Frame类的Show方法,它负责让该窗口显示出来,有时候我们不希望窗口被创建的时候就出现,因为我们可能还需要在上面加一些东西,等所有的东西都加载完毕,再一次性的显示出来,否则容易出现画面抖动。6.第五行则是app的MainLoop方法,它是一个事件循环,它接受用于的各种事件,并作出相应的反应,比如我们可以拖动、最小化、最大化、关闭,都是MainLoop在起作用,当然我们在后面也会定义一些对事件的处理。7.大家可以看到一个wxPython的最基本的支柱是app应用程序对象和frame窗口图像对象,我们以后需要处理数据信息在app里面写,当需要把东西绘制到屏幕上的时候,写到frame里面去,这样当项目稍微大一点的时候,不会因为数据和界面的过度耦合而难以升级。2014年辛星wxPython教程第一版10/110*************App类**************1.上面我们使用的是该模块自带的App类,有时候我们需要给我们的应用程序量身打造自己的App类,即我们需要创建该类的子类。2.我们要创建该类的子类,就可能需要覆盖父类的一些方法,这些方法里面很有必要值得一提的就是OnInit方法,该方法在程序开始的时候就会被调用,该方法不需要任何参数,但是需要返回一个布尔值,如果返回True,则程序正常向下执行,如果返回False,则程序退出,我们可能会因为缺少某些必要的资源而退出程序,则可以返回False,该方法会被自动调用,不用我们手动去调用。3.我们可以创建自己的__init__方法,那么我们必须调用父类的__init__方法。4.该类还有一个方法,不过通常不用我们去覆盖,它是用来调用做某些用途的,我们可以用SetTopWindow()方法来为应用程序指定一个顶级窗口,其实我们创建的窗口的第一个会被自动当做顶级窗口,比如我们上述代码中的frame就被当做了顶级窗口。5.还有一个方法,就是OnExit()方法,它和OnInit()是对应存在的,OnExit方法在最后一个窗口被关闭且在应用程序的清理过程之前被调用,这些清理过程包括释放一些资源,比如数据库连接、socket连接、打开的文件对象等等,如果我们调用了全局的Exit()方法来关闭应用程序,那么该方法会被自动触发。6.下面我们创建一个自己的应用程序类,并且在OnInit方法中去实现窗口的显示工作,代码如下:2014年辛星wxPython教程第一版11/1107.执行效果:8.说明:OnInit方法会被自动调用的,那么,如果我们手动调用一次呢?我想大家应该能猜到,如果猜不到,就动手试试,或者直接看我的执行结果,代码截图:2014年辛星wxPython教程第一版12/1109.执行结果截图:**************Frame类*****************1.上面我们研究了一下App类,接下来我们接触一下Frame类。我们知道,一个应用程序必须有一个顶级窗口对象,否则整个应用程序没有可以显示的界面,而顶级窗口对象又通常是Frame的子类。2014年辛星wxPython教程第一版13/1102.要想查看该类的所有方法,可以在交互式模式下先导入该模块,然后用help(wx.Frame)来查看:3.我大致看了下,不愧是用C++写的,求大求全,因此方法很多,下面我介绍几个比较重要的。***********Frame的__init__方法*****************1.下面这个截图简要的说明了__init__方法的常用参数:2014年辛星wxPython教程第一版14/1102.parent参数用于指定它的父对象,对于顶级窗口,它取值为None即可,这里指的说明的是子对象会随着父对象的销毁而销毁。3.id是ID号,每个窗口内的子部件的ID必须是唯一的,这是因为当事件发生的时候,我们需要此ID号来查找到产生该事件的对象,后面会详细说明。4.title是窗口的标题,我们前面也用过了。5.pos:它是一个wx.Point对象,它表示一个点,它指定了这个Frame的左上角的坐标位置,我们规定屏幕左上角的坐标取值为(0,0),如果传入(-1,-1)将会采用系统默认的位置,我们传递参数示例:pos=(100,10

1 / 110
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功