图形用户界面常见问题解答 — Python 文档

来自菜鸟教程
Python/docs/3.8/faq/gui
跳转至:导航、​搜索

图形用户界面常见问题解答

一般 GUI 问题

Python 有哪些独立于平台的 GUI 工具包?

根据您所针对的平台,有几种。 其中一些尚未移植到 Python 3。 至少已知 TkinterQt 与 Python 3 兼容。

特金特

Python 的标准构建包括 Tcl/Tk 小部件集的面向对象接口,称为 tkinter。 这可能是最容易安装和使用的(因为它包含在 Python 的大多数 二进制发行版 中)。 有关 Tk 的更多信息,包括指向源的指针,请参阅 Tcl/Tk 主页 。 Tcl/Tk 完全可移植到 Mac OS X、Windows 和 Unix 平台。


小部件

wxWidgets (https://www.wxwidgets.org) 是一个免费的、可移植的 GUI 类库,用 C++ 编写,在许多平台上提供原生的外观和感觉,包括 Windows、Mac OS X、GTK ,X11,全部列为当前稳定目标。 语言绑定可用于多种语言,包括 Python、Perl、Ruby 等。

wxPython 是 wxwidgets 的 Python 绑定。 虽然它通常稍微落后于官方 wxWidgets 版本,但它还通过纯 Python 扩展提供了许多其他语言绑定中不可用的功能。 有一个活跃的 wxPython 用户和开发者社区。

wxWidgets 和 wxPython 都是免费的、开源的、具有许可许可的软件,允许它们在商业产品以及免费软件或共享软件中使用。


Qt

Qt 工具包(使用 PyQtPySide)和 KDE(PyKDE4)有可用的绑定。 PyQt 目前比 PySide 更成熟,但如果您想编写专有应用程序,则必须从 Riverbank Computing 购买 PyQt 许可证。 PySide 对所有应用程序都是免费的。

Qt 4.5 以上是在 LGPL 许可下授权的; 此外,商业许可证可从 Qt 公司 获得。


Gtk+

Python 的 GObject 自省绑定 允许您编写 GTK+ 3 应用程序。 还有一个Python GTK+ 3 教程

旧的 PyGtk 绑定 Gtk+ 2 工具包已由 James Henstridge 实施; 见 < http://www.pygtk.org >.


基维

Kivy 是一个跨平台的 GUI 库,支持桌面操作系统(Windows、macOS、Linux)和移动设备(Android、iOS)。 它是用 Python 和 Cython 编写的,可以使用一系列窗口后端。

Kivy 是在 MIT 许可下分发的免费开源软件。


FLTK

FLTK 工具包 的 Python 绑定,这是一个简单但功能强大且成熟的跨平台窗口系统,可从 PyFLTK 项目 获得。


OpenGL

对于 OpenGL 绑定,请参阅 PyOpenGL


Python 有哪些特定于平台的 GUI 工具包?

通过安装 PyObjc Objective-C 桥接器 ,Python 程序可以使用 Mac OS X 的 Cocoa 库。

Pythonwin by Mark Hammond 包括一个到 Microsoft Foundation Classes 的接口和一个 Python 编程环境,该环境主要使用 MFC 类用 Python 编写。


Tkinter 问题

如何冻结 Tkinter 应用程序?

Freeze 是一种创建独立应用程序的工具。 冻结 Tkinter 应用程序时,应用程序不会真正独立,因为应用程序仍需要 Tcl 和 Tk 库。

一种解决方案是将应用程序与 Tcl 和 Tk 库一起交付,并在运行时使用 TCL_LIBRARYTK_LIBRARY 环境指向它们变量。

为了获得真正独立的应用程序,构成库的 Tcl 脚本也必须集成到应用程序中。 支持它的一种工具是 SAM(独立模块),它是 Tix 发行版 (http://tix.sourceforge.net/) 的一部分。

在启用 SAM 的情况下构建 Tix,对 Tclsam_init() 执行适当的调用等。 在 Python 的 Modules/tkappinit.c 中,并与 libtclsam 和 libtksam 链接(您可能还包括 Tix 库)。


我可以在等待 I/O 时处理 Tk 事件吗?

在 Windows 以外的平台上,是的,您甚至不需要线程! 但是您必须稍微重组您的 I/O 代码。 Tk 与 Xt 的 XtAddInput() 调用等效,它允许您注册一个回调函数,当文件描述符上的 I/O 可能时,它将从 Tk 主循环调用。 请参阅 文件处理程序


我无法在 Tkinter 中使用键绑定:为什么?

一个经常听到的抱怨是,即使按下了适当的键,绑定到 bind() 方法的事件的事件处理程序也不会得到处理。

最常见的原因是绑定应用的小部件没有“键盘焦点”。 查看焦点命令的 Tk 文档。 通常小部件通过点击获得键盘焦点(但不是标签;请参阅 takefocus 选项)。