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

通用 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 选项)可以使部件获得键盘焦点。