图形用户界面常见问题解答¶
通用 GUI 问题¶
Python 有哪些 GUI 工具包?¶
Python 的标准版本包含一个面向对象的 Tcl/Tk 小部件集接口,称为 tkinter。这可能是最容易安装(因为它包含在大多数 二进制发行版 中)和使用的。有关 Tk 的更多信息,包括指向源代码的指针,请参阅 Tcl/Tk 主页。Tcl/Tk 可以在 macOS、Windows 和 Unix 平台上完全移植。
根据您所针对的平台,还有其他几种选择。一个 跨平台 和 特定平台 GUI 框架列表可以在 python wiki 上找到。
Tkinter 问题¶
如何冻结 Tkinter 应用程序?¶
Freeze 是一个用于创建独立应用程序的工具。当冻结 Tkinter 应用程序时,应用程序不会真正独立,因为应用程序仍然需要 Tcl 和 Tk 库。
一个解决方案是将应用程序与 Tcl 和 Tk 库一起发布,并在运行时使用 TCL_LIBRARY
和 TK_LIBRARY
环境变量指向它们。
为了获得真正独立的应用程序,构成库的 Tcl 脚本也必须集成到应用程序中。支持这一点的一个工具是 SAM(独立模块),它是 Tix 发行版的一部分 (https://tix.sourceforge.net/).
使用启用了 SAM 的 Tix 构建,在 Python 的 Modules/tkappinit.c
中执行对 Tclsam_init()
的适当调用,等等,并链接到 libtclsam 和 libtksam(您可能还需要包含 Tix 库)。
在等待 I/O 时,我可以处理 Tk 事件吗?¶
在 Windows 以外的平台上,可以,而且您甚至不需要线程!但是您需要稍微调整一下您的 I/O 代码。Tk 具有与 Xt 的 XtAddInput()
调用等效的功能,它允许您注册一个回调函数,该函数将在文件描述符上可能进行 I/O 时从 Tk 主循环中调用。请参阅 文件处理程序。
我无法在 Tkinter 中使用按键绑定:为什么?¶
一个经常听到的抱怨是,即使按下相应的键,使用 bind()
方法绑定到事件的事件处理程序 绑定 也不会被处理。
最常见的原因是绑定所应用的小部件没有“键盘焦点”。查看 Tk 文档以了解 focus 命令。通常,通过单击小部件来赋予其键盘焦点(但标签除外;请参阅 takefocus 选项)。