本文最初于 2016 年 5 月发布,并已更新了新信息。
大多数程序员的旅程中都会有这样一个时刻,他们准备超越基本示例,开始为他们的程序构建图形界面。
在 Python 中,开始 GUI 编程的步骤并不十分复杂,但它们确实要求用户开始做出一些选择。 由于 Python 的本质是一种通用编程语言,其解释器可在每个常见的操作系统上使用,因此 Python 在创建图形用户界面方面必须相当不偏不倚。
幸运的是,程序员有很多选择,他们可以为用户创建一种简单的方式来与他们的程序进行交互。 存在适用于各种平台上的多个 UI 框架的绑定,包括 Linux、Windows 和 Mac 原生的框架,以及许多跨所有三个平台的框架。
在深入探讨之前,先做您自己的魔鬼代言人,并问问:您的应用程序真的有必要拥有传统的图形用户界面吗? 对于某些程序,答案是显而易见的。 如果您的应用程序本质上是图形化的,并且针对在单个本地计算机上本地运行进行了优化或只是在本地计算机上运行更有意义,那么是的,您可能应该考虑构建桌面 GUI。 很多时候,这在您设计的内容中显而易见。
但对于通用程序,不要排除命令行或 Web 界面。 命令行提供了许多优势——速度、远程访问、可重用性、可脚本化和控制——对于您的应用程序用户来说,这些优势可能比图形界面更重要,并且有许多库(例如 Click、 Cement 和 Cliff)使设计出色的命令行程序变得更加容易。
同样,即使对于旨在本地运行的程序,Web 界面也可能是值得考虑的选择,特别是如果您认为您的用户可能希望远程托管您的应用程序,并且像 Django、 Flask 或 Pyramid 这样的项目都使这变得简单明了。 您甚至可以使用像 pywebview 这样的库在原生 GUI 窗口中为 Web 应用程序添加一个瘦包装器。
或者,您可以使用像 Pyforms 这样的框架,通过单个代码库在 Web、命令行和桌面之间构建一致的体验。
仍然确定要构建 GUI 吗? 太棒了,这里有一些很棒的开源库可以帮助您入门。
PyQt、PySide 和 Qt for Python
PyQt 实现了流行的 Qt 库,因此,如果您熟悉另一种语言的 Qt 开发,可能是从为 KDE 或其他基于 Qt 的桌面环境开发原生应用程序开始,您可能已经熟悉 Qt。 这为开发在许多平台上具有熟悉外观和感觉的 Python 应用程序开辟了可能性,同时利用了大型 Qt 社区的工具和知识。
Qt 在开发者社区中已得到充分确立,并且具有反映这一点的工具。 围绕 Qt 编写 Python 应用程序意味着您可以访问 QtCreator,它具有设计器模式,可以为应用程序的布局生成代码。
PyQt 采用商业和 GPL 双重许可,与 Qt 项目本身非常相似,支持 PyQt 的主要公司提供了一个 许可常见问题解答 来帮助理解这对您的应用程序意味着什么。
对于使用 Python 的 Qt 库的另一个选项,请考虑 Qt for Python (通常称为 PySide2),它在 LPGL 下可用。
Tkinter
如果有一个软件包可以被称为 Python 的“标准”GUI 工具包,那就是 Tkinter。 Tkinter 是 Tcl/Tk 的包装器,Tcl/Tk 是一种流行的图形界面和语言配对,最初在 90 年代初流行起来。 选择 Tkinter 的优势在于大量的资源,包括书籍和代码示例,以及庞大的用户社区,如果您有疑问,他们可以为您提供帮助。 简单示例 很容易上手,并且具有相当的可读性。
Tkinter 在 Python 许可证下可用,在 Tcl/Tk 的 BSD 许可证之上。
WxPython
WxPython 将 wxWidgets 跨平台 GUI 库从其原生 C++ 引入到 Python。 WxPython 在不同的操作系统上看起来比 Tkinter 更原生,因为它使用主机系统的窗口小部件来构建 GUI。 它也很容易上手,并且拥有不断增长的开发者社区。 您可能需要将 wxPython 与您的应用程序捆绑在一起,或者要求用户自行安装,因为它不会与 Python 自动安装。
WxPython 使用其父项目的 wxWindows 库许可证,该许可证已获得 OSI 批准。
Python GTK+ 3
以前称为 PyGTK,Python GTK+ 3 项目为 GTK 对象(窗口、窗口小部件等)提供 Python 绑定。 GTK+ 最著名的是用作 GNOME 桌面的基础,但它也适用于 Linux、Windows 和 Mac 上的独立应用程序。 借助 Python GTK+ 3,相同的框架可用于您的 Python 项目。
当您使用 Python GTK+ 3 时,您可以使用为 GTK+ 本身创建的许多相同的开发工具。 最值得注意的是,这包括 Glade,一个用于 GTK+ 应用程序的界面设计器。 在 Glade 中设计的界面以 XML 格式保存,并由应用程序代码中的 GtkBuilder 对象使用,但您使用的界面是拖放式的,这使得创建动态且响应迅速的 UI 变得容易,而无需将您在脑海中看到的内容转换为布局代码。
Kivy
Kivy 的构建考虑了快速开发和现代设备,它是一个适用于 Linux(包括 Raspberry Pi)、Windows、Mac 和 Android 的工具包。 该项目专注于“创新用户界面”,它已被用于多媒体应用程序,例如手机的音乐控制器应用程序到占据会议室整面墙的白板应用程序。
Kivy 没有像 QtCreator 和 Glade 这样的可视化布局程序,但它使用自己的设计语言来帮助您将 UI 布局与代码对象关联起来。 这使您可以轻松地对应用程序中的类和函数进行划分(在心理上和布局代码中)。 Kivy 还托管了 Kivy Garden,这是一个用户创建的窗口小部件和附加组件的存储库,因此如果您正在考虑创建 Kivy 本身未提供的功能,您可能会在 Garden 中找到它。
这些并不是您唯一的选择,甚至连九牛一毛都算不上。 如需更多选项,请查看官方 Python 软件基金会 Wiki 上的“Python 中的 GUI 编程”页面,其中列出了数十种其他工具。 有多种解决方案可以将 Python 绑定到许多不同的窗口小部件库和 GUI 工具,例如 FLTK、 FOX 以及许多其他工具。 虽然初学者可能应该避免仅提供部分实现的项目,或者那些不再积极维护的项目,但在各种情况下都有很多好的工具。
许多现有的选项适用于传统的应用程序,这些应用程序采用其父桌面环境的窗口外观和感觉,但有时您可能希望做一些完全不同的事情,例如,在视频游戏中。 对于这些情况,也有很棒的库,例如 pygame、 pyglet 和 Panda3d。
您是否有此处未提及的收藏? 请在下面的评论中告诉我们!
您是否有兴趣阅读更多类似的文章? 注册我们的 每周电子邮件新闻通讯。
21 条评论