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

Contents

有哪些针对 Python 的与平台无关的 GUI 工具包?

根据您要针对的平台,有几种。

Tkinter

Python 的标准构建包括 Tcl/Tk 小部件集的面向对象接口,称为 Tkinter。这可能是最容易安装和使用的。有关 Tk 的更多信息(包括指向源的指针),请参阅https://www.tcl.tk的 Tcl/Tk 主页。 Tcl/Tk 可完全移植到 Mac OS X,Windows 和 Unix 平台。

wxWidgets

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

wxPython(http://www.wxpython.org)是 wxwidgets 的 Python 绑定。尽管它通常比正式的 wxWidgets 发行版稍有滞后,但它还pass纯 Python 扩展提供了许多Function,而这些扩展在其他语言绑定中是不可用的。有一个活跃的 wxPython 用户和开发者社区。

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

Qt

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

Qt 4.5 及以上版本已获得 LGPL 许可;同样,可以从Qt 公司获得商业许可证。

Gtk+

詹姆斯·亨斯特里奇(James Henstridge)已实现Gtk+ toolkit的 PyGtk 绑定;参见< http://www.pygtk.org >。

FLTK

PyFLTK 项目提供了FLTK 工具包的 Python 绑定,这是一个简单但Function强大且成熟的跨平台窗口系统。

OpenGL

有关 OpenGL 绑定,请参见PyOpenGL

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

pass安装PyObjc Objective-Cbridge,Python 程序可以使用 Mac OS X 的 Cocoa 库。

Mark Hammond 的Pythonwin包括 Microsoft 基础类的接口和 Python 编程环境,该环境主要使用 MFC 类以 Python 编写。

Tkinter questions

如何冻结 Tkinter 应用程序?

冻结是用于创建独立应用程序的工具。冻结 Tkinter 应用程序时,这些应用程序将不是 true 的独立应用程序,因为该应用程序仍需要 Tcl 和 Tk 库。

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

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

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

awaitI/O 时可以处理 Tk 事件吗?

在 Windows 以外的平台上,是的,甚至不需要线程!但是,您必须稍微重组 I/O 代码。 Tk 与 Xt 的XtAddInput()调用等效,它允许您注册一个回调函数,当在文件 Descriptors 上可以进行 I/O 时,将从 Tk 主循环调用该函数。参见File Handlers

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

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

最常见的原因是绑定所适用的窗口小部件没有“键盘焦点”。查看 Tk 文档中的 focus 命令。通常,pass单击小部件可以使它成为键盘焦点(但不包括标签;请参见 takefocus 选项)。