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