图形用户界面常见问题

通用 GUI 问题

Python 有哪些 GUI 工具包?

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

根据您所针对的平台,还有几种替代方案。您可以在 python wiki 上找到跨平台特定平台GUI 框架列表。

Tkinter 问题

如何冻结 Tkinter 应用程序?

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

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

各种第三方冻结库,如 py2exe 和 cx_Freeze,都内置了对 Tkinter 应用程序的处理。

在等待 I/O 时能否处理 Tk 事件?

在 Windows 以外的平台上,可以,而且您甚至不需要线程!但您需要稍微重构您的 I/O 代码。Tk 具有 Xt 的 XtAddInput() 调用的等效功能,它允许您注册一个回调函数,当文件描述符上可能进行 I/O 时,该函数将从 Tk 主循环中调用。请参阅 文件处理器

Tkinter 中键绑定不起作用:为什么?

一个常见的抱怨是,即使按下了相应的键,使用 bind() 方法绑定到事件的事件处理程序也无法得到处理。

最常见的原因是绑定适用的部件没有“键盘焦点”。请查看 Tk 文档中的焦点命令。通常,通过点击部件来赋予它键盘焦点(但标签除外;请参阅 takefocus 选项)。