图形用户界面常见问题解答¶
通用 GUI 问题¶
Python 有哪些 GUI 工具包?¶
Python 的标准版本包含一个面向 Tcl/Tk 部件集的面向对象接口,称为 tkinter。这可能是最容易安装(因为它包含在大多数 Python 的二进制发行版中)和使用的。有关 Tk 的更多信息,包括指向源代码的指针,请参阅 Tcl/Tk 主页。Tcl/Tk 完全可移植到 macOS、Windows 和 Unix 平台。
Tkinter 问题¶
如何冻结 Tkinter 应用程序?¶
Freeze 是用于创建独立应用程序的工具。冻结 Tkinter 应用程序时,应用程序不会真正独立,因为应用程序仍然需要 Tcl 和 Tk 库。
一种解决方案是将应用程序与 Tcl 和 Tk 库一起交付,并使用 TCL_LIBRARY
和 TK_LIBRARY
环境变量在运行时指向它们。
各种第三方冻结库(如 py2exe 和 cx_Freeze)内置了对 Tkinter 应用程序的处理。
在等待 I/O 时,我可以让 Tk 处理事件吗?¶
在 Windows 以外的平台上,可以,您甚至不需要线程!但是您必须稍微重组一下 I/O 代码。Tk 具有与 Xt 的 XtAddInput()
调用等效的功能,允许您注册一个回调函数,该函数将在文件描述符上可以进行 I/O 时从 Tk 主循环调用。请参阅 文件处理程序。
我无法在 Tkinter 中使按键绑定工作:为什么?¶
经常听到的抱怨是,使用 bind()
方法绑定到事件的事件处理程序,即使在按下相应的键时也不会被处理。
最常见的原因是应用绑定的部件没有“键盘焦点”。查看 Tk 文档中的焦点命令。通常,通过单击部件(但不适用于标签;请参阅 takefocus 选项)可以使部件获得键盘焦点。