图形用户界面常见问题解答 — Python 文档
图形用户界面常见问题解答
Python 有哪些独立于平台的 GUI 工具包?
根据您所针对的平台,有几种。
特金特
Python 的标准构建包括 Tcl/Tk 小部件集的面向对象接口,称为 Tkinter。 这可能是最容易安装和使用的。 有关 Tk 的更多信息,包括指向源的指针,请参阅 Tcl/Tk 主页 https://www.tcl.tk。 Tcl/Tk 完全可移植到 Mac OS X、Windows 和 Unix 平台。
小部件
wxWidgets (https://www.wxwidgets.org) 是一个免费的、可移植的 GUI 类库,用 C++ 编写,在许多平台上提供原生的外观和感觉,包括 Windows、Mac OS X、GTK ,X11,全部列为当前稳定目标。 语言绑定可用于多种语言,包括 Python、Perl、Ruby 等。
wxPython (http://www.wxpython.org) 是 wxwidgets 的 Python 绑定。 虽然它通常稍微落后于官方 wxWidgets 版本,但它还通过纯 Python 扩展提供了许多其他语言绑定中不可用的功能。 有一个活跃的 wxPython 用户和开发者社区。
wxWidgets 和 wxPython 都是免费的、开源的、具有许可许可的软件,允许它们在商业产品以及免费软件或共享软件中使用。
Qt
Qt 工具包(使用 PyQt 或 PySide)和 KDE(PyKDE4)有可用的绑定。 PyQt 目前比 PySide 更成熟,但如果您想编写专有应用程序,则必须从 Riverbank Computing 购买 PyQt 许可证。 PySide 对所有应用程序都是免费的。
Qt 4.5 以上是在 LGPL 许可下授权的; 此外,商业许可证可从 Qt 公司 获得。
Python 有哪些特定于平台的 GUI 工具包?
通过安装 PyObjc Objective-C 桥接器 ,Python 程序可以使用 Mac OS X 的 Cocoa 库。
Pythonwin by Mark Hammond 包括一个到 Microsoft Foundation Classes 的接口和一个 Python 编程环境,该环境主要使用 MFC 类用 Python 编写。
Tkinter 问题
如何冻结 Tkinter 应用程序?
Freeze 是一种创建独立应用程序的工具。 冻结 Tkinter 应用程序时,应用程序不会真正独立,因为应用程序仍需要 Tcl 和 Tk 库。
一种解决方案是将应用程序与 Tcl 和 Tk 库一起交付,并在运行时使用 TCL_LIBRARY
和 TK_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 选项)。