注意: 虽然 JavaScript 对于本网站并非必不可少,但您与内容的互动将受到限制。请启用 JavaScript 以获得完整体验。

macOS 上使用 Tcl/Tk 的 IDLE 和 tkinter

重要提示

如果您使用的是 macOS 12 Monterey 或更高版本,在使用 IDLE 或其他基于 tkinter 的应用程序时,可能会遇到文件打开和保存对话框的问题。python.org 安装程序的最新版本(针对 3.10.03.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 库

注意

虽然 TclTk 是单独的框架和库,但它们密切相关,并且通常同时安装或更新。您不应尝试混合搭配 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