macOS 上使用 Tcl/Tk 的 IDLE 和 tkinter
重要提示
如果您使用的是 macOS 12 Monterey 或更高版本,在使用 IDLE 或其他基于 tkinter 的应用程序时,可能会遇到文件打开和保存对话框的问题。python.org 安装程序的最新版本(针对 3.10.0 和 3.9.8)已修补了 Tk 版本以避免这些问题。这些问题应该会在即将发布的 Tk 8.6.12 版本中得到修复。
如果您使用的是从任何当前的 python.org macOS Python 安装程序 (3.10.0+ 或 3.9.0+) 安装的 Python,则无需采取进一步的操作即可使用 IDLE 或 tkinter。将使用内置的 Tcl/Tk 8.6 版本。
如果您使用的是 macOS 10.6 或更高版本,Apple 提供的 Tcl/Tk 8.5 存在可能导致应用程序崩溃的严重错误。如果您想使用 IDLE 或 Tkinter,请不要使用 Apple 提供的 Python。而是安装并使用来自 python.org 的较新版本的 Python 或提供或链接到较新版本的 Tcl/Tk 的第三方发行版。
Python 的集成开发环境 IDLE 和它使用的 tkinter GUI 工具包 依赖于 Tk GUI 工具包,而后者本身不是 Python 的一部分。为了获得最佳结果,重要的是在您的计算机上安装正确版本的 Tcl/Tk。对于从本网站下载的适用于 macOS 的最新 Python 安装程序,以下是当前建议的摘要,以及更详细的信息。
Python 版本 | 安装程序变体 | macOS 版本 | 推荐的 Tcl/Tk | 备选 Tcl/Tk | 不推荐 |
---|---|---|---|---|---|
3.10.0, 3.9.8 | universal2 | 10.9+ | 内置 8.6.11 | ||
3.9.8 | 仅限 Intel | 10.9+ | 内置 8.6.8 |
macOS 上的 Tk
目前,macOS 上常用的 Tk 主要有三种变体
- Aqua Cocoa Tk
- 作为通用 64 位和 32 位二进制文件提供的新型本机实现。此变体是 Tk 8.6 和 Tk 8.5.13 中标准的本机 macOS 变体。Aqua Cocoa 支持已向后移植到 Tk 8.5(早于 8.5.13),并由 Apple 从 macOS 10.6 开始发布,并由 ActiveState 从其 8.5.9.1 版本开始发布。
- Aqua Carbon Tk
- 因为它使用较旧的 macOS Carbon 接口实现,所以它仅作为 32 位二进制文件(通常用于 Intel 和 PowerPC 处理器)提供。Aqua Carbon Tk 8.4 包含在 macOS 10.4 至 10.14 版本中,也可从 ActiveState 获得。在 ActiveTcl 8.5.9 之前,Tk 8.5 的 Aqua Carbon 变体作为 ActiveState 社区下载提供。从 8.5.13 开始,Tk 项目不再支持 Tk 8.5 的 Carbon 构建。从本网站下载的适用于旧版 Python 的仅限 32 位的 Python 安装程序与 Aqua Carbon Tk 8.4 链接。
- X11 Tk
- 传统的平台无关的 UNIX Tk 实现,需要 X11 服务器,例如 Apple X11.app(在较旧的 macOS 版本中作为可选组件提供,或从第三方发行商处获得)。可以构建 64 位和 32 位二进制文件。虽然从本网站下载的 Python 安装程序不支持 X11 Tk,但 macOS 的其他 Python 发行商可能会支持。
Tcl/Tk 版本
内置 8.6.11
从 Python 3.9.1 开始,所有从 python.org 下载的 macOS 的当前 universal2 Python 安装程序都提供其自身的 Tcl/Tk 8.6.11 私有副本。它们不会查找或使用任何第三方的或系统的 Tcl/Tk 副本。这是一个Aqua Cocoa Tk。
内置 8.6.8
从 Python 3.7.0、3.6.8 和 2.7.16 开始,所有从 python.org 下载的 macOS 的当前旧版仅限 64 位 Intel 的 Python 安装程序都提供其自身的 Tcl/Tk 8.6.8 私有副本。它们不会查找或使用任何第三方或系统的 Tcl/Tk 副本。这是一个Aqua Cocoa Tk。
ActiveTcl 8.5.18.0
ActiveState 提供 Tcl/Tk 的二进制发行版,这些发行版与 macOS 版本中 Apple 提供的发行版向上兼容,并且通常更新。此版本的 Tcl/Tk 包含一些在使用 tkinter 或 IDLE 时可能遇到的严重问题的修复(请参阅下面的 Apple 8.5.9)。您可以从 ActiveState 网站下载此版本的安装程序。请注意,ActiveState 社区版二进制文件不是开源的,并受 ActiveState 许可的约束。您应该在下载之前阅读该许可,以验证您的使用是否符合其使用条款。从 Python 3.7.0、3.6.8 和 2.7.16 开始,没有当前从 python.org 下载的 macOS Python 安装程序使用此版本或任何其他外部版本的 Tcl/Tk。
这是一个Aqua Cocoa Tk。
Apple 8.5.9
此版本包含在 macOS 10.7 至至少 macOS 10.14 中。在撰写本文时,Tk 8.5.9 至少存在两个已知问题,这些问题存在于 Apple 8.5.9 Tk 中,但在更新的上游 8.5 版本中已修复。更严重的问题是在输入合成字符时,Tk 中会立即崩溃,例如Option-u在美式键盘上。(此问题记录为 Tk bug 2907388。)还有更普遍的输入管理器对合成字符的支持问题(Tk bug 3205153),该问题也在更新的 Tcl/Tk 8.5 版本中得到修复。您可以通过使用当前的 python.org 安装程序或使用不使用 Apple 8.5.9 Tk 的第三方 Python 发行版来避免这些问题。这是一个Aqua Cocoa Tk。
Apple 8.5.7
此版本包含在 macOS 10.6 中。已知 IDLE 与 macOS 10.6.x 的所有版本中包含的 Apple 8.5.7 一起使用时会挂起或崩溃。因此,我们强烈建议您不要尝试将 Tkinter 或 IDLE 与 10.6 中的 Apple 提供的 Python 2.6.1 一起使用。而是安装支持较新版本 Tk 的较新版本的 Python。这是一个Aqua Cocoa Tk。
Python 如何选择要使用的 Tk 库
注意
虽然 Tcl 和 Tk 是单独的框架和库,但它们密切相关,并且通常同时安装或更新。您不应尝试混合搭配 Tcl 和 Tk 版本。对特定版本的 Tk 的引用假定同时安装了相应版本的 Tcl。
从本网站下载的 适用于 macOS 的 Python 安装程序在运行时动态链接到 Tcl/Tk macOS 框架。Tcl/Tk 的主要版本是在创建安装程序时确定的,不能被覆盖。所有当前的 python.org 安装程序都链接到它们自己的内置 Tcl/Tk 8.6 框架,并且不使用外部 Tcl/Tk 框架,因此本节的其余部分仅适用于非当前版本,因此不再受支持。
适用于 Python 3.6.x 和 2.7.x 的 Python 64 位/32 位 macOS 安装程序动态链接到 Tcl/Tk 8.5 框架。动态链接发生在第一次导入 tkinter (Python 3) 或 Tkinter (Python 2) 时(具体来说,是内部的 _tkinter C 扩展模块)。默认情况下,macOS 动态链接器首先在/Library/Frameworks中查找具有正确主要版本的 Tcl 和 Tk 框架。这是第三方或从源代码构建的框架(包括 ActiveTcl 版本)的标准位置。如果在此处找不到具有正确主要版本的框架,则动态链接器会在/System/Library/Frameworks中查找同一版本,这是 macOS 随附的 Apple 提供的框架的位置。(请注意,您通常不应修改或删除/System/Library.)
中的文件)与 macOS 上常见的情况一样,已安装的 Python 以及 Tcl 和 Tk 框架都构建为可在多个 CPU 架构(通用二进制文件)和多个 macOS 级别(最低部署目标)上运行。为了使 Python 能够与特定的 Tcl 和 Tk 版本动态链接,Tcl/Tk 框架中可用的架构必须包含 Python 正在运行的架构,并且它们的最低部署目标不应大于 Python 的部署目标。
修订历史
- 2021-11-05 - 为 3.9.8 和 macOS 12 Monterey 更新
- 2021-10-04 - 为 3.10.0 和 3.9.7 更新
- 2020-10-05 - 为 3.9.0 和 3.8.6 更新,删除 2.7
- 2020-08-17 - 为 3.7.9 更新
- 2020-07-20 - 为 3.8.5 更新
- 2020-06-27 - 为 3.7.8 更新
- 2020-05-14 - 为 3.8.3 更新
- 2020-03-10 - 为 3.8.2 和 3.7.7 更新
- 2019-12-19 - 为 3.8.1、3.7.6 和 2.7.17 更新
- 2019-10-15 - 为 3.8.0、3.7.5 和 macOS 10.15 更新
- 2019-07-08 - 为 3.7.4 更新;3.6.x 现在仅进行安全修复
- 2019-03-25 - 为 3.7.3 更新
- 2019-03-03 - 为 2.7.16 更新
- 2018-12-24 - 为 3.7.2 和 3.6.8 更新
- 2018-10-20 - 为 3.7.1、3.6.7 和 macOS 10.14 更新
- 2018-06-27 - 为 3.7.0 和 3.6.6 更新
- 2018-05-30 - 为 3.7.0b5 更新
- 2018-05-02 - 为 3.7.0b4 和 2.7.15 更新;删除了仅限 32 位的引用
- 2018-03-29 - 为 3.7.0b3 和 3.6.5 更新
- 2018-02-28 - 为 3.7.0b2 更新
- 2018-01-31 - 为 3.7.0b1 和 3.6.4 更新
- 2017-10-03 - 为 3.6.3 和 macOS 10.13 更新
- 2017-09-16 - 为 2.7.14 更新;删除了 3.5.x
- 2017-07-17 - 为 3.6.2 更新
- 2017-03-21 - 为 3.6.1 和(迟到的)3.5.3 更新
- 2016-12-23 - 为 3.6.0 更新
- 2016-12-17 - 为 2.7.13 更新
- 2016-09-23 - 为 macOS 10.12 更新
- 2016-07-31 - 为 3.5.2 和 2.7.12 更新;删除了 3.4.x
- 2015-12-20 - 为 3.4.4 更新
- 2015-12-06 - 为 3.5.1、2.7.11 和 macOS 10.11 更新
- 2015-09-13 - 为 3.5.0 更新
- 2015-05-23 - 为 2.7.10 和 ActiveTcl 8.5.18.0 更新
- 2015-02-23 - 为 3.4.3 更新
- 2014-12-10 - 为 2.7.9 和 ActiveTcl 8.5.17.0 更新
- 2014-10-16 - 为 macOS 10.10 更新
- 2014-10-06 - 为 3.4.2 和 ActiveTcl 8.5.16.0 更新
- 2014-09-22 - 为 3.4.2rc1 更新
- 2014-07-01 - 为 2.7.8 更新
- 2014-06-01 - 为 2.7.7 更新;移除了 2.7.6 和 3.3.5
- 2014-05-18 - 为 3.4.1 和 2.7.7rc1 更新
- 2014-03-16 - 为 3.4.0 和 3.3.5 更新
- 2014-02-10 - 为 3.3.4 和 3.4.0rc1 更新
- 2014-01-05 - 为 3.4.0b2 更新
- 2013-11-24 - 澄清 ActiveState 网站仍然引用 8.5.15.0
- 2013-11-24 - 移除了 3.4.0b1 的内置版本,移除了 3.3.2 和 2.7.5
- 2013-11-10 - ActiveTcl 8.5.15.1;移除了 3.3.3rc2 和 2.7.6 的内置版本。
- 2013-10-27 - 为 3.3.3rc1 和 2.7.6rc1 及其内置的 8.5.15 更新。
- 2013-10-24 - 为 macOS 10.9 和 ActiveTcl 8.5.15 更新,移除了 3.2.5。
- 2013-10-20 - 为 3.4.0a4 及其内置的 8.5.15 更新。
- 2013-09-29 - 为 3.4.0a3 更新
- 2013-09-09 - 为 3.4.0a2 及其内置的 8.5.14 更新。
- 2013-08-03 - 为 3.4.0a1 和 ActiveTcl 8.4.20 更新
- 2013-05-18 - 为 ActiveTcl 8.5.14 更新
- 2013-05-15 - 为 3.3.2、2.7.5 和 3.2.5 更新
- 2013-04-06 - 为 3.3.1、2.7.4 和 3.2.4 更新
- 2012-12-26 - 为 ActiveTcl 8.5.13 和 Issue 15853 补丁安装程序更新
- 2012-09-29 - 为 3.3.0 最终版更新,并恢复到 ActiveTcl 8.5.11.1
- 2012-08-02 - 为 ActiveTcl 8.5.12 更新
- 2012-07-28 - 为 macOS 10.8 更新
- 2012-04-11 - 为 3.2.3 最终版和 2.7.3 最终版更新
- 2012-03-18 - 为 3.2.3rc2 和 2.7.3rc2 更新
- 2012-03-04 - 为 ActiveTcl 8.5.11.1、3.2.3rc1、2.7.3rc1 更新,移除了 3.1.4
- 2011-11-12 - 为 ActiveTcl 8.5.11 更新
- 2011-09-04 - 为 3.2.2 最终版更新
- 2011-07-21 - 为 macOS 10.7 和 ActiveTcl 8.5.10.1 更新
- 2011-07-09 - 为 3.2.1 最终版和 ActiveTcl 8.5.10 更新
- 2011-06-12 - 为 2.7.2 最终版和 3.1.4 最终版更新
- 2011-05-30 - 为 3.2.1rc、2.7.2rc 和 3.1.4rc 更新
- 2011-03-08 - 添加警告并包含 Python 如何与 Tcl/Tk 版本链接的详细信息
- 2011-02-20 - 为 3.2 最终版更新
- 2011-01-31 草案 1 - 3.2rc2 的初步信息
- 2011-01-14 草案 0