图形用户界面(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 库。
One solution is to ship the application with the Tcl and Tk libraries, and point
to them at run-time using the TCL_LIBRARY
and TK_LIBRARY
environment variables.
为了获得真正能独立运行的应用程序,来自该库的 Tcl 脚本也需要被整合进应用程序。 一个做这种事情的工具叫 SAM (独立模块),它是 Tix 分发版的一部分 (https://tix.sourceforge.net/)。
在启用 SAM 时编译 Tix ,在 Python 文件 Modules/tkappinit.c
中执行对 Tclsam_init()
等的适当调用,并且将程序与 libtclsam 和 libtksam 相链接(可能也要包括 Tix 的库)。
在等待 I/O 操作时能够处理 Tk 事件吗?¶
On platforms other than Windows, yes, and you don't even
need threads! But you'll have to restructure your I/O
code a bit. Tk has the equivalent of Xt's XtAddInput()
call, which allows you
to register a callback function which will be called from the Tk mainloop when
I/O is possible on a file descriptor. See 文件处理程序.
在Tkinter中键绑定不工作:为什么?¶
An often-heard complaint is that event handlers bound
to events with the bind()
method
don't get handled even when the appropriate key is pressed.
最常见的原因是,那个绑定的控件没有“键盘焦点”。请在 Tk 文档中查找 focus 指令。通常一个控件要获得“键盘焦点”,需要点击那个控件(而不是标签;请查看 takefocus 选项)。