Python GUI框架有哪些、它们有什么特点、应该怎么选择?

Python GUI框架有哪些?首先可以在百度一下Python Gui 这个关键字,然后进入GuiProgramming – Python Wiki页面,Python官方这里罗列的关于Python语言下可以使用来开发GUI的框架。很多都是基于GTk、Qt、TK和wxWidget衍生的框架, 这些GUI库有30多种,我们只需要掌握Python基本语法、GUI框架的理论基础就行, 比如说写个POS端的软件,得需要知道POS机的业务逻辑,还需要掌握所选的GUI框架的基本布局、调色的知识。

1. Python Gui罗列

Python官方文档GuiProgramming – Python Wiki 如同上面说是的官网使用单独的页面展示了Python下支持的GUI框架,足够详细。分别按照浏览器、平台、特定平台、设计工具进行了分类,下面这也大概做一个简单的学习。

按浏览器分类

  • atlas-python 目测是基于浏览器内核的GUI框架, 可以在树莓派上跑,能快速的操作树莓派相关的硬件资源

    版本:0.10.7,更新时间: 2019-08-01, start: 31

  • PyJamas pyjs 是PyJamas的演变版本,Pyjs 是用于Web和桌面的 RIA 开发平台,包含一个 Python 到 JavaScript 的编译器,一个 Ajax 框架和一组 Widget API。Pyjs 相当于是谷歌的 GWT 的 Python 移植版本,同时也支持桌面应用开发 —— Pyjs Desktop,可直接使用独立桌面应用程序的方式来运行相同代码的 Web 项目,而无需打开浏览器。

    版本:0.8 更新时间:2012-06-01 start: 974

按框架平台分类

这个分类在库很多近40种框架,这里不一一列举了,就捡几个真正能在各大搜索引擎里常露面的记录一下

  • PyQt 这一个非常成熟的Qt在Python下的绑定框架,可以说是Qt的干儿子,也就是说基本是按C++版本的接口提供给开发者使用的,Qt是很有名气的C++ GUI类库,体系庞大,接口丰富,文档齐全。据说全球500强企业里有1/4的企业在用Qt。可想而知。说回PyQt是Riverbank公司提供的Python下的类库,有良好的商业支持,个人开源发布应用程序是免费的。知名度和使用量最大,所有把它排第一。

    版本: 5.14 更新时间:2019-12.13 start: – 支持平台:Linux/Windows/Mac

  • Pyside2: 是Digia公司开发跨平台的应用程序框架Qt的Python绑定版本,是Qt的亲儿子,在2009年8月,PySide首次发布但这个是基于Qt4.8的版本,后来发布的版本基于Qt5所有变成了PySide2。提供和PyQt类似的功能,并相容 API。但与 PyQt 不同处为使用LGPL授权, 也就说开发者可以免费用商业。这个是巨大的诱惑,但是因为发布的晚使用的人还如PyQt多所有排第二。

    版本: 5.14 更新时间:2019-12.13 start: – 支持平台:Linux/Windows/Mac

  • Kivy 是Python 基金会扶持的一个纯Python 的GUI框架,当然底层是OpenGL SE做支持, 用于开发行动应用程序和其它采用自然用户界面的多点触控应用软件,在2012年,Kivy从Python软件基金会获得$5000美元补助,用于移植Kivy到Python 3.3。Kivy也支援由Bountysource赞助的树莓派。其架构包括所有建造应用程序的元素,例如:支援许多种输入,例如鼠标,键盘、触控式使用者界面(TUIO)和特定操作系统的多重触控事件,只采用OpenGL ES 2的图形函式库,且根基于向量缓冲物件(Vertex Buffer Object)和着色器,支援多点触控的庞大控件,一个中间语言(Kv)用来简化客制控件的设计。这KV语音设计的很优雅,是借鉴了QML的思路,实现UI和业务逻辑分离,而且KV里也支持简单的代码。社区也很活跃, 合适移动APP开发。

版本: 1.11.0 更新时间:2019-1.2 start: 11K 支持平台:Linux/Windows/Mac/ios/Android/树莓派

  • TKinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Mac系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. 是集成在Python内部的GUI库,运行内存很小,但是使用起来比较费劲,不想Qt那样有丰富的接口文档,功能局限。

版本: Python自带 更新时间:- start: – 支持平台:Linux/Windows/Mac

  • pygame 包含图像、声音pygame建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供支持,主要用于2D游戏开发的,如果做3D游戏开发可以使用Panda3D

版本: 1.9.6 更新时间:2019-04-25 start: 1.7K 支持平台:Linux/Windows/Mac

  • wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的、功能健全的GUI用户界面。 wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够支持运行在32 [1] /64位windows、绝大多数的Unix或类Unix系统、Macintosh OS X下。 wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。

版本: 4.0.7 更新时间:2019-11-12 start: 1.3K 支持平台:Linux/Windows/Mac

其实wxPython使用量和资料上估计比kivy多,那为什么把它排最后呢,要说桌面开发跨平台不如Qt, 说强大也不如Qt, 而kivy是针对移动端的,特效和触控上有亮点。其实上面这些都摘抄的官网和百度百科做的笔记。

指定平台

  • Chaquopy Android Studio基于Gradle的构建系统的插件。支持将Python代码嵌入常规Java / Kotlin应用程序中,或完全使用Python编写应用程序,并具有对Android API的完全访问权限。
  • [PyObjC])(http://pyobjc.sourceforge.net/) 在Mac上支持Cocoa Aqua GUI
  • Win32All 也以其组件的名称而闻名:PythonWin(用于UI),Win32Com(用于COM / ActiveX),Win32(用于API的其他某些部分)

开发工具

  • PyQt: Eric 是PyQt的免费集成开发环境,功能比较齐全集成界面编译器UIC和界面设计器Qt Designer调用,但是我还是喜欢Pycharm, 也可以手动配置调用UIC和Qt Designer, Qt Designer是一个所见即所得的UI设计器,其目的也是为了UI和业务逻辑分离。如果使用PySide还可以使用Qt Creator也是Qt官方提供的免费工具包,但主要用于原生的Qt C++ 和QML开发,后面应该会完善Python支持,要不然PySide没法火起来。
  • wxPython: wxFormBuilder是为wxPython专门设计的UI编辑器
  • kivy: kivy-desinger 是为kivy专门设计的UI编辑器, 不是很成熟

2. 如何选择GUI框架

那么多的库怎么选是个问题, 可以从几个维度综合考量: 平台开发工具接口文档框架是否有支持活跃度使用量, 这个活跃度可以从github提交的频率和问题回答与讨论量看出,而使用量也类似,还可以从主流的搜索引擎上看相关关键字匹配数量,另外还可以逛逛Stack overflow 问题数量, 别选一个没人知道也没人使用的框架,到时遇到坑,连搜索英文都找不到答案,那就瞎了。还得看看框架最后的更新时间一看是90年代的那就别考虑了,当然太新也不能选,再一看0.1的版本,那这框架的稳定性肯定得打问号,结合上面的框架文档介绍似乎都有自己的定位,从排名上也能看出一二了:

  • 桌面开发应用: 复杂的应用,要求执行效率的应用PyQt或PySide, 它两接口一样, 触屏桌面应用Kivy, 配置低的使用Tkinter
  • 移动开发应用: Kivy
  • 游戏: 2D 选 Pygame, 3D 选Panda3D, 注意不是Pandas哦:)

以上选项前天是非Web的Python GUI项目, 所有今天开始,选择PyQt学习一下,进入PyQt之旅。

版权声明:本文为onsunsl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/onsunsl/p/GUI_Programming_in_Python.html