圖形化使用者界面常見問答集¶
目錄
Python 有哪些 GUI 工具包?¶
Python 的标准编译包含了 tkinter。这是一个面向对象的接口,指向 Tcl/Tk 微件包。 该接口大概是最容易安装(因为该接口包含在 Python 的大部分 二进制发行版 中)和使用的工具包。要了解 Tk 的详情,比如源代码等,可访问 Tcl/Tk 项目主页。 Tcl/Tk 可完整移植至 Mac OS X,Windows 和 Unix 操作系统上。
存在多种选项,具体取决于你的目标平台。 Python Wiki 上提供了一个 跨平台 和 平台专属 的 GUI 框架列表。
有关Tkinter的问题¶
我怎样“冻结”Tkinter程序?¶
Freeze是一个用来创建独立应用程序的工具。 当冻结(freeze) Tkinter程序时,程序并不是真的能够独立运行,因为程序仍然需要Tcl和Tk库。
一种解决方法是将程序与 Tcl 和 Tk 库一同发布,并且在运行时使用环境变量 TCL_LIBRARY
和 TK_LIBRARY
指向他们的位置。
为了获得真正能独立运行的应用程序,来自库里的 Tcl 脚本也需要被整合进应用程序。 一个做这种事情的工具叫 SAM (stand-alone modules,独立模块) ,它是 Tix distribution (http://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 主循环将会调用这个回调函数。 参见 File Handlers。
在Tkinter中键绑定不工作:为什么?¶
经常听到的抱怨是:已经通过 bind()
方法绑定了事件的处理程序,但是,当按下相关的按键后,这个处理程序却没有执行。
最常见的原因是,那个绑定的控件没有“键盘焦点”。请在 Tk 文档中查找 focus 指令。通常一个控件要获得“键盘焦点”,需要点击那个控件(而不是标签;请查看 takefocus 选项)。