图形用户界面常见问题解答 — Python 文档

来自菜鸟教程
Python/docs/3.9/faq/gui
跳转至:导航、​搜索

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

一般 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 环境指向它们变量。

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

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


我可以在等待 I/O 时处理 Tk 事件吗?

在 Windows 以外的平台上,是的,您甚至不需要线程! 但是您必须稍微重组您的 I/O 代码。 Tk 与 Xt 的 XtAddInput() 调用等效,它允许您注册一个回调函数,当文件描述符上的 I/O 可能时,它将从 Tk 主循环调用。 请参阅 文件处理程序


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

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

最常见的原因是绑定应用的小部件没有“键盘焦点”。 查看焦点命令的 Tk 文档。 通常小部件通过点击获得键盘焦点(但不是标签;请参阅 takefocus 选项)。