码迷,mamicode.com
首页 > 编程语言 > 详细

Python GUI漫谈

时间:2015-07-26 00:16:53      阅读:746      评论:0      收藏:0      [点我收藏+]

标签:

Windows下面做C++那会用惯了MFC,对框架产生了依赖,使用框架虽然占用了很多不必要的系统资源,也拖慢了程序的运行效率,但是做个demo什么的往框框里填点代码就可以的确很方便。而且对我来说,这样比纯手写更规整,哪个部分应该填什么不应该填什么系统会帮你甄别,避免了纯手打的随意性。今天上网随便搜搜Python的帖子,想起了以前扫过一眼的PyQt。其实我对框架最基本的要求就是当我需要做UI的时候一定要简单实用,当然,最好是有很强的扩展性,这样以后真需要玩的时候也有得玩。可能个人水平问题,用过python标配的TKinter,写出来的东西太丑陋,而且控件位置很难控制。也有的人推荐wxPython,可惜下载页上提示目前只支持Python2.7。顺便吐槽一下,Python3都出来这么久了,为什么原来很多好用的工具都没跟进。其实弃用wxPython的原因还有有人说bug多,文档资源不丰富,其实我对文档这种东西还是很依赖的。用MFC的时候,文档全面细致到让我钦佩,很多时候做个demo照扒例子就够用,学点什么东西很容易上手。其实前面也说了,我需要的是框架,不只是一些UI层面的东西,而TKinter和wxPython仅仅是GUI上的一些类库,因而又回到了PyQt这个似乎更全面的类库上来。先来看一下python页面对PyQt的描述:PyQt is one of the two most popular Python bindings for the Qt cross-platform GUI/XML/SQL C++ framework (another binding is PySide).再来看一下百度对Qt的描述

Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。
Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。

好了,看到这里我满意了,因为它说是与MFC是同类型的东西,看来是没找错。

再回到前面,我不得不承认,我有强迫症,因为我注意到出了PyQt外,还有另外一个用python封装Qt的东西,PySide,它跟PyQt到底谁更好呢?python主页对PySide的描述简简单单,没有发现什么特别的地方。在来到PySide的wiki页面,我看到The latest version of PySide is 1.2.2 released on April 25, 2014 and provides access to the complete Qt 4.8 framework.因为是初学python,python2和python3对我来说是一样的陌生。虽然网上关于python2的项目和文档非常多,但python3替代python2是大势所趋,只是时间问题。所以既然是初学,就想省去之后再从2过度到3的功夫。当然,基于现在python3的项目和文档非常少,从python3开始学起路就会漫长一点。基于这种思路,我希望我所用到的东西都是最新的,能跟上形势的,Qt最新版本已经更新到5.x,而PySide目前才跟到4.8,而且上一次的更新日期是14年,网上也有帖子说PySide对Python3目前也只是部分支持,所以基本就放弃了对PySide的期望。不过基于PySide是PyQt强有力的对上,还是扒了一下网友对PyQt与PySide的比较:

今天在 Python-CN 邮件组里看到讨论 PyQt 和 Nokia PySide 的问题。

PyQt 是商业及 GPL 的版权, 而 PySide 是 LGPL.

 

也就是如果使用 PyQt 做商业应用的话就需要付费, 而使用 Nokia 的 PySide 则不需要。

 

题外话:

自从 Nokia 收购了 Qt, 一直大力推广 Qt。前天发布的最新的 PySide 已经支持 MS Windows, 
而且是 LGPL 的。 

相信 PySide 未来会比 PyQt 更强大易用。按照 Nokia 的说法是会更加 Pythonic。 

PySide is an open source sofware project providing Python bindings for the Qt framework. Qt is a cross-platform application and UI framework, allowing the developers to write applications once and deploy them across many operating systems without rewriting the source code, while Python is a modern, dynamic programming language with a vivid developer community. 

Combining the power of Qt and Python, PySide provides the wealth of Qt framework for developers writing software in Python and presents a first-class rapid application development platform purported to be available on all major operating systems.

 

 

// 以下为在网上搜索的结果


LGPL概念 

  LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNULibrary General Public License (GNU 库通用公共许可证),在宽松程度上与 BSD, Apache,XFree86 许可证相似。


  GPL(General Public License)和LGPL( Lesser General Public License)是GNU的两种License。越来越多的自由软件(Free Software)使用GPL作为其授权声明,如果对GPL一点都不了解,有可能在使用自由软件时违反了GPL的授权。如果是个人或不正规的公司倒也无所谓,但如果是有规模的公司,恐怕会有被起诉的风险。


  在使用Log4cpp时我想到了授权的事情,于是有了兴趣对GPL做一下了解。这是必要的,因为公司也维护了一个验证过的自由软件库,里面包含的自由软件除了功能上是可靠的,另外就是一定可以被私有使用的,否则后果很严重。


  Log4cpp最初的版本使用GPL作为授权声明的,在0.2.1版本以后改用更为宽松的 LGPL。LGPL最初是Library GPL的缩写,后来改称作Lesser GPL,即为更宽松的GPL。当一个自由软件使用GPL声明时,该软件的使用者有权重新发布、修改该软件,并得到该软件的源代码;但只要使用者在其程序中使用了该自由软件,或者是使用修改后的软件,那么使用者的程序也必须公布其源代码,同时允许别人发布、修改。也就是说,使用GPL声明下的的自由软件开发出来的新软件也一定是自由软件。


  LGPL是GPL的变种,也是GNU为了得到更多的甚至是商用软件开发商的支持而提出的。与 GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。所以任何公司在使用自由软件之前应该保证在 LGPL或其它GPL变种的授权下。
编辑本段

Richard Stallman关于GPL和LGPL的论述
 


  为什么你不应该使用LGPL发布你的下一个库


  GNU计划在使用库时有两个首要的许可证.一个是GNU LGPL(库GPL);另一个是普通的GNU GPL.选择不同的许可有很大的不同:选择LGPL允许在私有程序中使用该库;选择普通的GPL则只允许在自由软件中使用它.


  关于哪一种许可证对指定的库是最好的这一问题实际上是一个策略问题,它取决于实际情况.当前,大多数的GNU库被采用LGPL,这意味着我们只使用着其中的一个策略,而忽略了另一个. 所以现在我们在寻求更多以普通的GPL许可证形式发布的库.


  私有软件开发者有金钱上的优势;自由软件开发者需要相互之间利用各自的优势.对一个库采用普通的GPL对自由软件开发者的优势要大于对私有软件开发者: 他们可以使用的库对于私有软件开发者是不可利用的.


  使用普通的GPL并不是对于所有的库都有好处.在某些情况下更有理由来使用LGPL.最常见的情况就是当一个自由库的特性可以很容易地被私有软件以其他可替代库来实现.在这种情况下,库不能给与自由软件任何特别的优势,因而最好还是为LGPL发布该库.


  这也就是为什么我们为GNU C 库选择LGPL.总之,有很多的其他C库;我们使用GPL发布该库,将迫使私有软件开发者不得不使用其它的库--对他们来说这不成问题,而我们则有了麻烦.


  然而,当一个库所提供的功能是非常独特的时候,如GNU Readline, 情况就大不一样了. Readline库可实现输入编辑和记录交互式程序操作,这在别处通常是不可多得. 在GPL下发布它并限制它只能在自由程序中使用, 这我们的社团是一个重要的促进.至少今天某个应用程序之所以是自由软件,只是因为它必需要用到Readline.


  如果我们收集一些强大的、私有软件中没有相类似东西的、采用GPL的库,它们将提供一系列有用的模块用于新的自由软件的构造. 这对于将来的自由软件开发将是一个显著的优势, 一些项目将为了使用这些库而考虑使软件自由化. 大学的项目是易于被影响的;而且今天,随着某些公司开始考虑使软件自由化, 甚至一些商业项目也会由此受到影响.


  私有软件开发者试图否认自由竞争的重要性, 他们会拼命说服作者不要将库使用GPL来发布. 例如,他们会呼吁利己主义,信誓旦旦地说如果我们让他们在私有软件产品中使用代码,将有“更多的用户”用到该库. 流行是一种诱惑,它使一个库开发者倾向于相信这种观点:社会首先需要的是促进一种库的流行;.


  但是我们不应该听从这种诱惑,因为如果我们联合起来,我们可以做得更好.我们这些自由软件开发者应该相互支持. 通过发布只能为自由软件使用的库,我们可以互相帮助,使彼此的自由软件包优于其它的私有替代品. 整个自由软件运动将会有更多的机会,因为自由软件作为一个整体将会在竞争中表现更佳.


  因为"LGPL(Library GPL)"的称呼传达了关于这一问题的错误观点,我们计划将称呼改为"次级GPL(Lesser GPL)".事实上要更换名称要花一定的时间,但你不必再等--你可以现在就发布应用GPL许可证的库.


从上面看起来PySide的前景还想比PyQt更强大,而且对商业开发来讲,PySide是更好的选择,当然对于我个人来说,区别不大。不过我在想,诺基亚都倒闭了,PySide还会像他说的那样迅猛发展吗。果然网友的一个帖子印证了我的猜测:

早上一爬起来,就看到一个不好的消息,Matti Airas 在PySide邮件列表 中说:

  • Currently, the vast majority of the PySide core development is done by the OpenBossa INdT team in Brazil and funded by Nokia‘s MeeGo Computers team - the PySide project has internally been an enabler for the MeeGo 1.2 Harmattan Python project. Unfortunately, the Nokia N9 is the only MeeGo (Harmattan) phone to be published by Nokia, and Nokia‘s MeeGo team is being ramped down already in the near future. Because of this, the Nokia MeeGo funding for PySide is slated to end after this year, and I have also failed to find a new sponsor for the project within Nokia.

上周(8月18)刚过完两周岁生日的PySide,一直以来是由位于巴西的OpenBossa INdT(Nokia Technology Institute)小组在 Nokia 的 MeeGo 计算机小组的资金资助下进行的。

不幸的是,Nokia的MeeGo小组似乎已经自身难保了,他们对PySide的支持预计将于明年结束。PySide新的支持者目前尚未找到。

Matti Airas 相信,即使没有Nokia这个接生婆的继续帮助,PySide项目应该也有存活并继续长大的能力。但这意味着,社区将在项目规划和实际开发中都要负担起领导的责任。

其实单从PySide和PyQt的更新速度上我就可以抉择是选择哪一个。再简单说说PyQt吧,分PyQt4和PyQt5两个版本,前者是基于Qt4.x的,支持Python。后者是基于Qt5.x的,支持Python3。官网虽然只有C++版本Qt文档,但还是很全面的。而且安装包里带了很多examples,对新手来说作用还是很大的。不过现在启动examples会出现问题,5.3.1版本的能启动起examples,但是launch example的时候会报错:技术分享

更新了显卡驱动也不行。后来升级到5.5.1examples直接启动不起来,闹心。examples的启动程序是"C:\Python34\Lib\site-packages\PyQt5\examples\qtdemo.pyw"

明天再继续研究吧。不过今天突然发现python官网又能打开了,不用再特意FQ了。虽然谷歌被封但是国内还有镜像网站能上去,但是有些国外的技术网站还是上不去,早晚还得FQ。

Python GUI漫谈

标签:

原文地址:http://www.cnblogs.com/pyjogger/p/4676859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!