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

macOS 上的 IDLE 和 tkinter (Tcl/Tk)

重要提示

如果您使用的是 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 或提供或链接到更新版本的 Tcl/Tk 的第三方分销商安装和使用更新版本的 Python。

Python 的集成开发环境 IDLE 及其使用的 tkinter GUI 工具包 依赖于不属于 Python 本身的 Tk GUI 工具包。为获得最佳结果,在您的机器上安装适当的 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 中的标准原生 macOS 变体,自 Tk 8.5.13 起。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 获取。Aqua Carbon 版本的 Tk 8.5 在 ActiveTcl 8.5.9 之前曾作为 ActiveState Community Download 提供。自 8.5.13 起,Tk 项目不再支持 Tk 8.5 的 Carbon 构建。可从本网站下载的适用于较旧 Python 版本的仅 32 位 Python 安装程序与 Aqua Carbon Tk 8.4 链接。
X11 Tk
传统的平台无关 UNIX Tk 实现,需要 X11 服务器,例如在较旧的 macOS 版本中作为可选组件提供或从第三方分销商提供的 Apple X11.app。可以构建 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-only 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 Community Edition 二进制文件不是开源的,并受 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 错误 2907388。)还存在更普遍的组合字符输入管理器支持问题(Tk 错误 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 一起使用时会挂起或崩溃。因此,我们强烈建议您不要尝试在 10.6 中使用 Apple 提供的 Python 2.6.1 随附的 Tkinter 或 IDLE。相反,请安装支持更新版本 Tk 的新版本 Python。这是一个 Aqua Cocoa Tk

Python 如何选择要使用的 Tk 库

注意

虽然 TclTk 是独立的框架和库,但它们密切相关,通常同时安装或更新。您不应尝试混合搭配 Tcl 和 Tk 版本。对特定版本 Tk 的引用假定也安装了相应的版本 Tcl

从本网站下载的 Python for macOS 安装程序在运行时动态链接到 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.)

中的文件。

修订历史

  • 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 和问题 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