设为首页 收藏本站
查看: 805|回复: 0

[经验分享] Python Boa-constructor的使用

[复制链接]

尚未签到

发表于 2015-4-25 11:35:11 | 显示全部楼层 |阅读模式
  上篇介绍了Python的环境搭建,主要是开发环境的介绍,本篇主要介绍Python的GUI开发工具Boa-constructor的使用和我们的程序开发完毕后的打包问题,本篇还会介绍在Python中我们如何使用第三方扩展库。
  

一、如何选择GUI开发工具
  Python的gui开发工具有很多,有Thiner,WxPython,PyQt,pyGtk,Jython,MFC,IronPython,PythonCard,Dabo,AnyGui,Wpy等,简直有太多了,选几种用的比较多的简单介绍一下,目前我用的是WxPyton。
  Tkinter
  Tkinter 似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui库,也是opensource的产物。Tkinter可用 于windows/linux/unix/macintosh操作系统,而且显示风格是本地化的。Tkinter用起来非常简单,python自带的 IDLE就是采用它写的。除此外,tkinter的扩展集pmw和Tix功能上都要相对它强大,但tkinter却是最基本的。我认为,在用python 做gui开发,tkinter是最基本的知识,所以这个环节是必须要学习的。你或许在以后的开发中并不常用tkinter,但是一些小型的应用上面,他还 是很有用的,而且开发速度也很快。
  WxPython
  WxWidgets应该算是近几年了比较流行的GUI跨平台开发技术了。 wxWidgets有不同的版本应用,有c++的,也有basic的,现在在python上面也有较好的移植。wxpython的功能上面要强于 tkinter,她提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。对于大型GUI应用上面,wxPython还是具有很强的优势 的。boa constructor可以帮助我们快速可视地构建wxwidgets界面。
  Jython
  尝试过用python访问java类库吗,那么就用jython吧。jython其实可以认为是另外一个python开发环境,基于java的,但是大多数 的CPython调用jython下还是可以的。你可以在jython环境下像使用java一样来通过python的语法来调用java语言,真的很酷。
  MFC
  Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用。代码风格可以类似win32 sdk,也可以类似MFC,由你选择。如果你仍不放弃vc一样的代码过程在python下,那么这就是一个不错的选择。
  WPY
  MFC风格的Gui开发库,代码风格也类似于MFC,仅管如此,你依旧可以使用这个库来开发GUI应用,而不用担心平台移植的问题。
  IronPython
  如果你要想开发.net下面的应用的话,那么IronPython就是你的选择,与jython有点类似,他同样支持标准的python模块,但同样增加了 对.net库的支持。你也可以理解为他是另一个python开发环境。你可以非常方便地使用python语法进行.net应用的开发,这一点听起来真的挺 有意思。
  上面的内容是Google找的,总之,介绍了这么多,我个人意见是,如果你是java用户,你可以选择用jython;如果你是.net用户,那么就用ironPython吧。如果你对Visual C++很熟悉,那么你可以使用MFC,WPY或是wxPython,当然我更建议wxPython了。当然,我认为对于tkinter是每一个原来搞C的 人都应该了解和学习的GUI库,因为她很轻便,小型应用就可以使用她来搞定,而对于较大型应用可以采用pyGtk,pyQt,WxPython或 PythonCard来搞定,这样的话,既可以注重知识的衔接性,也可以快速进行开发了。
  

二、Python扩展库
  如果说强大的标准库奠定了python发展的基石,丰富的第三方库则是python不断发展的保证,随着python的发展一些稳定的第三库被加入到了标准库里面,可以在http://pypi.python.org/pypi?%3Aaction=index找到非常多的Python扩展库,其中下面讲的wxPython就是其中之一。我猜你喜欢Python的其中一个理由一定是它的非常多的拓展库,下面列出了常用的Python第三方库。
  Django    开源web开发框架,它鼓励快速开发,并遵循MVC设计,我以前用过很多次,比较好用,开发周期短。
  ActiveGrid  企业级的Web2.0解决方案。
  Karrigell     简单的Web框架,自身包含了Web服务,py脚本引擎和纯python的数据库PyDBLite 。
  webpy    一个小巧灵活的Web框架,虽然简单但是功能强大 。
  CherryPy    基于Python的Web应用程序开发框架 。
  Pylons    基于Python的一个极其高效和可靠的Web开发框架 。
  Zope     开源的Web应用服务器。
  TurboGears   基于Python的MVC风格的Web应用程序框架。
  Twisted     流行的网络编程库,大型Web框架。
  Quixote     Web开发框架。
  Matplotlib  用Python实现的类matlab的第三方库,用以绘制一些高质量的数学二维图形 。
  SciPy     基于Python的matlab实现,旨在实现matlab的所有功能 。
  NumPy     基于Python的科学计算第三方库,提供了矩阵,线性代数,傅立叶变换等等的解决方案 。
  PyGtk      基于Python的GUI程序开发GTK+库。
  PyQt     用于Python的QT开发库。
  WxPython     Python下的GUI编程框架,与MFC的架构相似。
  Tkinter      Python下标准的界面编程包。
  BeautifulSoup 基于Python的HTML/XML解析器,简单易用。
  PIL        基于Python的图像处理库,功能强大,对图形文件的格式支持广泛。
  MySQLdb      用于连接MySQL数据库。
  cElementTree高性能XML解析库,Py2.5应该已经包含了该模块,因此不算一个第三方库了。
  PyGame       基于Python的多媒体开发和游戏软件开发模块。
  Py2exe     将python脚本转换为windows上可以独立运行的可执行程序。
  pefile       Windows PE文件解析器
  

三、boa-constructor的使用
  我是一个.Net开发人员,我之所以不选择IronPython的原因是不想再让客户端去安装.net framework这么庞大的库,所以我选择了wxPython。wxPython的介绍上面有,我个人觉得wxPython还是比较容易学习的。因为有API可以供我们查阅,它和MFC有很多相同或者相似的地方,我个人还是比较喜欢,或者可以我没有去尝试其他的库吧,因为我发现我已经喜欢上它了。
  和wxPython库搭配的开发IDE 也有很多,spe, boa-constructor,eclipse+pydev. 个人建议选择boa-constructor 和 Eclipse+Pydev 搭配。其中boa-constructor用来开发界面,Eclipse+Pydev 用来编写代码。
  boa-constructor个人感觉还是非常不错的,刚开始可能会不懂,比较吃力一点,但是等你学会使用了以后相信你会喜欢上它的。下载地址:点击此处下载。  安装boa-constructor之前请确定你的机器上已经安装了wxPython 和Python。目前需要wxPython 2.4.0.7 or higher and Python 2.1 or higher.
  boa-constructor 安装完毕后桌面或者开始菜单并没有它的启动快捷方式或者是目录。你需要在你的Python安装目录下找到Python26\Lib\site-packages\boa-constructor 这个路径下Boa.py文件。Boa.py为boa-constructor启动文件。
  1.双击Boa.py文件加载完毕后会出现如下界面。
DSC0000.png



  • 其中1中的最上方一个窗口为boa-constructor的工具条,里面有基本的一些控件等。见下图:
DSC0001.png
  其中Python,wxPython, boa-constructor 的帮助文档你也会在这个工具条中找到,这几个文档能为你后面的开发工作起到很大的作用。


  • 下面的为检视器窗口,它的主要作用相当于VS中的属性窗口,包括一些控件的属性,事件等。
DSC0002.png


  • 主工作区域窗口就不进行介绍了,都是中文显示。如下图:
DSC0003.png
  
  
  下面简单介绍一下如何新建工程。
  


  • 点击最上方工具条视图中的第五个图标。
DSC0004.jpg
  


  • 点击之后,主编辑器窗口会出来2个未保存的新建文件(*App1*,*Frame1*),其中App1为程序的启动文件,里面包含应用程序初始化的一些信息以及Main函数,Frame1为生成的一个新页面,接下面我们需要做的就是绘制界面了。
DSC0005.jpg
  


  • 切换到Frame1选项卡,然后按快捷键F12或者点击框架设计器按钮(),此时会弹出Frame1的设计界面,如下图:
DSC0006.jpg
  


  • 从工具条拖拉我们需要的控件到设计器区域,我拖拽了一个Button和一个Label,另外我修改了程序的标题。如下图:
DSC0007.jpg
  


  • WxPython也是采用的事件驱动的模型,在左边的检视器窗口我们可以看到某一个控件的信息等,包括该控件的基本属性信息,以及构造该空间所需的必须属性和可设置属性,另外还有就是该控件所拥有的事件,如下图:
DSC0008.jpg
  


  • 如何在wxPython中添加事件?其实很简单,打开检视器窗口,切换到Evts选项卡,左边菜单栏会列出该控件所具有的事件,然后右边双击就可以了,最后,别忘了对你的更改进行提交(上面对号),如下图:
DSC0009.jpg
  


  • 下面为Boa为我们生成的界面代码,我们的后台逻辑代码可以在Eclipse中利用其更好的代码提示为我们提供便利。


DSC00010.gif DSC00011.gif View Code


  1 # -*- coding: gb2312 -*-
  2
  3 #Boa:Frame:Frame1
  4
  5  
  6
  7 import wx
  8
  9  
10
11 def create(parent):
12
13     return Frame1(parent)
14
15  
16
17 [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1LABEL1,
18
19 ] = [wx.NewId() for _init_ctrls in range(3)]
20
21  
22
23 class Frame1(wx.Frame):
24
25     def _init_ctrls(self, prnt):
26
27         # generated method, don't edit
28
29         wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
30
31               pos=wx.Point(426, 280), size=wx.Size(400, 250),
32
33               style=wx.DEFAULT_FRAME_STYLE,
34
35               title=u'\u6211\u7684\u7b2c\u4e00\u4e2aWxPython\u7a0b\u5e8f')
36
37         self.SetClientSize(wx.Size(384, 212))
38
39  
40
41         self.Label1 = wx.StaticText(id=wxID_FRAME1LABEL1,
42
43               label=u'\u6211\u559c\u6b22BOA', name=u'Label1', parent=self,
44
45               pos=wx.Point(64, 24), size=wx.Size(97, 25), style=0)
46
47         self.Label1.SetBackgroundColour(wx.Colour(228, 252, 230))
48
49         self.Label1.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
50
51               u'\u5fae\u8f6f\u96c5\u9ed1'))
52
53  
54
55         self.button1 = wx.Button(id=wxID_FRAME1BUTTON1,
56
57               label=u'\u70b9\u51fb\u6309\u94ae', name='button1', parent=self,
58
59               pos=wx.Point(192, 24), size=wx.Size(75, 24), style=0)
60
61         self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,
62
63               id=wxID_FRAME1BUTTON1)
64
65  
66
67     def __init__(self, parent):
68
69         self._init_ctrls(parent)
70
71  
72
73     def OnButton1Button(self, event):
74
75  
76
77         fileDlg = wx.FileDialog(self,u'FileDialog',u'choose file')
78
79         re = fileDlg.ShowModal()
80
81         if re==5100:
82
83             sr= fileDlg.GetFilename()
84
85             print sr
86
87             self.ShowDlg(sr)
88
89             #todo:
90
91         event.Skip()
92
93        
94
95     def ShowDlg(self,content=""):
96
97         dlg = wx.MessageDialog(self,content,
98
99                                    '确认框',
100
101                                    wx.OK | wx.ICON_INFORMATION
102
103                                    )
104
105         dlg.ShowModal()
  
  
  至此,BOA的使用简单介绍到这里,后面更多的探索还要自己去慢慢摸索。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60546-1-1.html 上篇帖子: Python学习笔记(10):异常 下篇帖子: Python代码调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表