5 个开源 Python GUI 框架

你的 Python 程序是否需要图形用户界面? 这里有五个工具可以帮助你构建一个。
1 位读者喜欢这篇文章。
Windows

PixelAnarchy 来自 Pixabay, CC0。

本文最初发表于 2016 年 5 月,并已更新了新信息。

大多数程序员在他们的编程旅程中都会遇到一个时刻,他们准备超越基本的 示例,开始为他们的程序构建图形界面。

在 Python 中,开始 GUI 编程的步骤并不十分复杂,但它们确实需要用户开始做出一些选择。 由于 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。 与 Tkinter 相比,WxPython 在不同的操作系统上看起来更原生,因为它使用主机系统的窗口小部件来构建 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

你有这里没有提到的最喜欢的吗? 请在下面的评论中告诉我们!

你是否有兴趣阅读更多类似的文章? 注册我们的 每周电子邮件新闻通讯

标签
Jason Baker
前红帽员工。 现在是一名顾问和有抱负的企业家。 地图爱好者、创客和开源桌面和自托管软件的热情安装者。
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算机行业工作,并且经常同时进行。

21 条评论

正如你所提到的,Tkinter 文档非常完善,但相当有限,因为 Tk 也是如此,所以它适用于非常简单的界面,但仅此而已。 wxPython 功能更强大,而且非常好,但文档相当差,所以你只能自己摸索。

PySide 是 PyQt 的 LGPL 替代方案。 PySide 最近也被 Qt 项目采用,并将作为 Qt 的官方 Python 绑定享有头等地位。

wxWidgets 在许多方面都不错,但不兼容 Python 3,因此对于新项目来说并不是真正可行的替代方案。 一个名为 Project Phoenix 的 Python 3 重写正在进行中,但到目前为止已经进行了几年,但尚未达到宣布的生产质量。

TkInter 是标准库的一部分,但你不必看得太远就能看到核心开发人员推荐替代方案。

在使用所有这些替代方案之后,我想说 PySide 是目前最有趣的前进方向。 Python 社区将看到 Qt 项目如何很好地照顾它,这将很有趣。

我喜欢 Python 的 Kivy 框架。 你可以使用相同的代码在所有环境中运行:Windows、Android、iOS、OS X、Linux 等。

Kivy 是一个很棒的框架,在平板电脑和移动设备上也非常好。 唯一的缺点是对于中学生来说有点难。 前段时间,我用 pygame 和 Simple Game Code 为我的儿子上了一些课程。 SGC 很简单,顾名思义。 此外,Pygame 并非旨在用于 GUI 应用程序。 好处是 pygame 易于使用,即使对于小学生也是如此。 利用来自 Pygame 的知识来介绍 SGC 的 GUI 基础知识很有用。 这种组合也可能适用于简单的原型。 更多信息请访问:http://pychildren.blogspot.com/search/label/sgc

回复 Greg Krakow (未验证)

这是一个非常好的 Python GUI 选项集合。 我真的很欣赏 cli 列表,它也是 GUI 的替代方案。

你也可以将这 3 个添加到你的列表中!

Kivy - Kivy 是更有趣的项目之一,获得宽松的 MIT 许可,基于 OpenGL ES 2,并为每个平台和 Android/iOS 包含原生多点触控。 它是一个围绕主循环的事件驱动框架,因此非常适合游戏开发。

Pyforms - Pyforms 只有两年历史(使其成为最新的框架之一),是一个用于开发 GUI 应用程序的 Python 2.7/3.x 跨环境框架。 它是模块化的,并以最少的努力鼓励代码重用性。

libavg - 这是另一个第三方库,用 C++ 编写,并从 Python 编写脚本,显示元素的属性作为 Python 变量,一个功能齐全的事件处理系统,定时器 (setTimeout, setInterval),支持日志记录等等。 与 Kivy 一样,libavg 使用 OpenGL 并利用硬件加速。

自定义图形 gui 怎么样? 使用所有框架,你可以构建带有标准元素的标准 gui,例如按钮、单选按钮等等,但是如果我想构建带有自定义图形的界面,例如 kodi 界面或 firefox 界面,或者每个其他具有没有“标准”元素的 gui 的软件,该怎么办?
谢谢。

自定义图形 gui 怎么样? 使用所有框架,你可以构建带有标准元素的标准 gui,例如按钮、单选按钮等等,但是如果我想构建带有自定义图形的界面,例如

我想知道为什么 PyGObject 只是被提及而没有被描述。 绝对不是抱怨你的选择。 只是想知道为什么。 有什么特殊原因吗? 它有一套很好的教程和文档。 它支持 Linux、Windows 和 macOS,并且可以与 Python 2.7+ 以及 Python 3.4+ 一起使用。

在上述工具中,Tkinter 是开发基于 GUI 的界面的最简单工具。

curses python 绑定提供了非常灵活的控制台控制

PySimpleGUI 是一个新的框架,非常适合初学者和中级 GUI。 在 Windows、Mac、Linux、pypy、Raspberry Pi 上的 Python3 上运行。 任何 tkinter 运行的地方,PySimpleGUI 都应该运行。

它是 tkinter 的包装器,为程序员提供了一个非常类似 Python 的界面。 GUI 是 GUI 小部件的简单列表。 来自 GUI 的结果是返回值列表。

pip install PySimpleGUI

我没有太多 GUI 框架的经验
但我想知道使用非 Web GUI 的目的/优势是什么?
Web-GUI 提供跨平台解决方案,并且不需要额外的安装/依赖项

IUP(便携式用户界面)是一个成熟的易于使用的跨平台原生 UI 桌面 GUI 库。 (动态/静态)

一个值得尝试的好清单。 Tkinter 是最流行的吗?

我期待学习使用 Python 进行 GUI 编程

有趣的文章

这是桌面 Python GUI 工具的非常好的总结。 对于 Web GUI,有很多很棒的开源选项可以**在 Web 浏览器中运行 Python**(没错,不再需要 JavaScript!!!)

这是一篇文章(和演讲视频),我在其中介绍了 6 种不同的选项,并附带演示

https://anvil.works/blog/python-in-the-browser-talk

好吧,你应该看看所有这些旧工具和技巧,比如 Electron,有 Electron 与 Python 的绑定。
Slack、Skype 都是用 Electron 构建的,
另一个技巧是使用 Flask,我知道它是一个 Web 框架,但它非常轻巧,可以编译成跨平台应用程序。

Electron python 绑定绝对值得一提,谢谢。 我可能会修改这篇文章以包含它。

但我不同意你对这里提到的工具的看法。 虽然其中许多工具“旧”(对于“旧”的某些定义),但它们也是*当前的*。 Python 本身也很旧,但这并不能阻止它成为有效的解决方案。

回复 作者: Zeeshan ahmad (未验证)

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.