IDLE?

源代碼: Lib/idlelib/


IDLE 是 Python 所內置的開(kāi)發(fā)與學(xué)習環(huán)境。

IDLE 具有以下特性:

  • 編碼于 100% 純正的 Python,使用名為 tkinter 的圖形用戶(hù)界面工具

  • 跨平臺:在 Windows、Unix 和 macOS 上工作近似。

  • 提供輸入輸出高亮和錯誤信息的 Python 命令行窗口 (交互解釋器)

  • 提供多次撤銷(xiāo)操作、Python 語(yǔ)法高亮、智能縮進(jìn)、函數調用提示、自動(dòng)補全等功能的多窗口文本編輯器

  • 在多個(gè)窗口中檢索,在編輯器中替換文本,以及在多個(gè)文件中檢索(通過(guò) grep)

  • 提供持久保存的斷點(diǎn)調試、單步調試、查看本地和全局命名空間功能的調試器

  • 配置、瀏覽以及其它對話(huà)框

編輯和導航?

編輯窗口?

IDLE 可以在啟動(dòng)時(shí)打開(kāi)編輯器窗口,這取決于選項設置和你啟動(dòng) IDLE 的方式。 在此之后,請使用 File 菜單。 對于給定的文件只能打開(kāi)一個(gè)編輯器窗口。

標題欄包含文件名稱(chēng)、完整路徑,以及運行該窗口的 Python 和 IDLE 版本。 狀態(tài)欄包含行號 ('Ln') 和列號 ('Col')。 行號從 1 開(kāi)始;列號則從 0 開(kāi)始。

IDE 會(huì )定擴展名為 .py* 的文件包含 Python 代碼而其他文件不包含。 可使用 Run 菜單來(lái)運行 Python 代碼。

按鍵綁定?

在本節中,'C' 是指 Windows 和 Unix 上的 Control 鍵,以及 macOS 上的 Command 鍵。

  • Backspace 向左刪除; Del 向右刪除

  • C-Backspace 向左刪除單詞; C-Del 向右刪除單詞

  • 方向鍵和 Page Up/Page Down 移動(dòng)

  • C-LeftArrowC-RightArrow 按單詞移動(dòng)

  • Home/End 跳轉到行首/尾

  • C-Home/C-End 跳轉到文檔首/尾

  • 一些有用的Emacs綁定是從Tcl / Tk繼承的:

    • C-a 行首

    • C-e 行尾

    • C-k 刪除行(但未將其放入剪貼板)

    • C-l 將插入點(diǎn)設為窗口中心

    • C-b 后退一個(gè)字符而不刪除該字符(通常你也可以用方向鍵進(jìn)行此操作)

    • C-f 前進(jìn)一個(gè)字符而不刪除該字符(通常你也可以用方向鍵進(jìn)行此操作)

    • C-p 向上一行(通常你也可以用方向鍵進(jìn)行此操作)

    • C-d 刪除下一個(gè)字符

標準的鍵綁定(例如 C-c 復制和 C-v 粘貼)仍會(huì )有效。 鍵綁定可在配置 IDLE 對話(huà)框中選擇。

自動(dòng)縮進(jìn)?

在一個(gè)代碼塊開(kāi)頭的語(yǔ)句之后,下一行會(huì )縮進(jìn) 4 個(gè)空格符(在 Python Shell 窗口中是一個(gè)制表符)。 在特定關(guān)鍵字之后(break, return 等),下一行將不再縮進(jìn)。 在開(kāi)頭的縮進(jìn)中,按 Backspace 將會(huì )刪除 4 個(gè)空格符。 Tab 則會(huì )插入空格符(在 Python Shell 窗口中是一個(gè)制表符),具體數量取決于縮進(jìn)寬度。 目前,Tab 鍵按照 Tcl/Tk 的規定設置為四個(gè)空格符。

另請參閱 Format 菜單 的縮進(jìn)/取消縮進(jìn)區的命令。

補全?

當被請求并且可用時(shí),將為模塊名、類(lèi)屬性、函數或文件名提供補全。 每次請求方法將顯示包含現有名稱(chēng)的補全提示框。 (例外情況參見(jiàn)下文的 Tab 補全。) 對于任意提示框,要改變被補全的名稱(chēng)和提示框中被高亮的條目,可以通過(guò)輸入和刪除字符、按 Up, Down, PageUp, PageDown, HomeEnd 鍵;或是在提示框中單擊。 要關(guān)閉補全提示框可以通過(guò) Escape, Enter 或按兩次 Tab 鍵或是在提示框外單擊。 在提示框內雙擊則將執行選擇并關(guān)閉。

有一種打開(kāi)提示框的方式是輸入一個(gè)關(guān)鍵字符并等待預設的一段間隔。 此間隔默認為 2 秒;這可以在設置對話(huà)框中定制。 (要防止自動(dòng)彈出,可將時(shí)延設為一個(gè)很大的豪秒數值,例如 100000000。) 對于導入的模塊名或者類(lèi)和函數屬性,請輸入 '.'。 對于根目錄下的文件名,請在開(kāi)頭引號之后立即輸入 os.sepos.altsep。 (在 Windows 下,可以先指定一個(gè)驅動(dòng)器。) 可通過(guò)輸入目錄名和分隔符來(lái)進(jìn)入子目錄。

除了等待,或是在提示框關(guān)閉之后,可以使用 Edit 菜單的 Show Completions 來(lái)立即打開(kāi)一個(gè)補全提示框。 默認的熱鍵是 C-space。 如果在打開(kāi)提示框之前輸入一某個(gè)名稱(chēng)的前綴,則將顯示第一個(gè)匹配項或最接近的項。 結果將與在提示框已顯示之后輸入前綴時(shí)相同。 在一個(gè)引號之后執行 Show Completions 將會(huì )實(shí)例當前目錄下的文件名而不是根目錄下的。

在輸入前綴后按 Tab 鍵的效果通常與 Show Completions 相同。 (如果未輸入前綴則為縮進(jìn)。) 但是,如果輸入的前綴只有一個(gè)匹配項,則該匹配項會(huì )立即被添加到編輯器文本中而不打開(kāi)補全提示框。

在字符串以外且開(kāi)頭不帶 '.' 地輸入前綴并執行 'Show Completions' 或按 Tab 鍵將打開(kāi)一個(gè)包含關(guān)鍵字、內置名稱(chēng)和現有模塊級名稱(chēng)的補全提示框。

當在編輯器(而非 Shell)中編輯代碼時(shí),可以通過(guò)運行你的代碼并在此后不重啟 Shell 來(lái)增加可用的模塊級名稱(chēng)。 這在文件頂部添加了導入語(yǔ)句之后會(huì )特別有用。 這還會(huì )增加可用的屬性補全。

Completion boxes initially exclude names beginning with '_' or, for modules, not included in '__all__'. The hidden names can be accessed by typing '_' after '.', either before or after the box is opened.

提示?

當在一個(gè) 可用的 函數名稱(chēng)之后輸入 ( 時(shí)將自動(dòng)顯示一個(gè)調用提示。 函數名稱(chēng)表達式可以包括點(diǎn)號和方括號索引操作。 調用提示將保持打開(kāi)直到它被點(diǎn)擊、光標移出參數區、或是輸入了 )。 當光標位于某個(gè)定義的參數區時(shí),可以在菜單中選擇 Edit 的 "Show Call Tip" 或是輸入其快捷鍵來(lái)顯示調用提示。

調用提示是由函數的簽名和文檔字符串到第一個(gè)空行或第五個(gè)非空行為止的內容組成的。 (某些內置函數沒(méi)有可訪(fǎng)問(wèn)的簽名。) 簽名中的 '/' 或 '*' 指明其前面或后面的參數僅限以位置或名稱(chēng)(關(guān)鍵字)方式傳入。 具體細節可能會(huì )改變。

在 Shell 中,可訪(fǎng)問(wèn)的函數取決于有哪些模塊已被導入用戶(hù)進(jìn)程,包括由 IDLE 本身導入的模塊,以及哪些定義已被運行,以上均從最近的重啟動(dòng)開(kāi)始算起。

例如,重啟動(dòng) Shell 并輸入 itertools.count(。 將顯示調用提示,因為 IDLE 出于自身需要已將 itertools 導入了用戶(hù)進(jìn)程。 (此行為可能會(huì )改變。) 輸入 turtle.write( 則不顯示任何提示。 因為 IDLE 本身不會(huì )導入 turtle。 菜單項和快捷鍵同樣不會(huì )有任何反應。 輸入 import turtle。 則在此之后,turtle.write( 將顯示調用提示。

在編輯器中,import 語(yǔ)句在文件運行之前是沒(méi)有效果的。 在輸入 import 語(yǔ)句之后、添加函數定義之后,或是打開(kāi)一個(gè)現有文件之后可以先運行一下文件。

代碼上下文?

在一個(gè)包含 Python 代碼的編輯器窗口內部,可以切換代碼上下文以便顯示或隱藏窗口頂部的面板。 當顯示時(shí),此面板可以?xún)鼋Y代碼塊的開(kāi)頭行,例如以 class, defif 關(guān)鍵字開(kāi)頭的行,這樣的行在不顯示時(shí)面板時(shí)可能離開(kāi)視野。 此面板的大小將根據需要擴展和收縮以顯示當前層級的全部上下文,直至達到配置 IDLE 對話(huà)框中所定義的最大行數(默認為 15)。 如果如果沒(méi)有當前上下文行而此功能被啟用,則將顯示一個(gè)空行。 點(diǎn)擊上下文面板中的某一行將把該行移至編輯器頂部。

上下文面板的文本和背景顏色可在配置 IDLE 對話(huà)框的 Highlights 選項卡中進(jìn)行配置。

Python Shell 窗口?

通過(guò) IDLE 的 Shell 可以輸入、編輯和召回整條語(yǔ)句。 大部分控制臺和終端在同一時(shí)刻只能處理單個(gè)物理行。

當向 Shell 粘貼代碼時(shí),它并不會(huì )被編譯和執行,直到按下 Return 鍵。 在此之前可以先編輯所粘貼的代碼。 如果向 Shell 粘貼了多行代碼,多條語(yǔ)句會(huì )被當作一條語(yǔ)句來(lái)編譯,結果將引發(fā) SyntaxError。

之前小節中描述的編輯功能在交互式地輸入代碼時(shí)也可使用。 IDLE 的 Shell 窗口還會(huì )響應以下按鍵。

  • C-c 中斷執行命令

  • C-d 發(fā)送文件結束命令;如果在 >>> 提示符后按下會(huì )關(guān)閉窗口。

  • Alt-/ (擴展單詞) 也有助于減少按鍵量

    歷史命令

    • Alt-p 提取與你所輸入鍵匹配的前一條命令。 在 macOS 上請使用 C-p。

    • Alt-n 提取下一條命令。 在 macOS 上請使用 C-n。

    • 在任意的前一條命令上按 Return 將提取該命令

文本顏色?

IDLE 文本默認為白底黑字,但有特殊含義的文本將以彩色顯示。 對于 Shell 來(lái)說(shuō)包括 Shell 輸出,Shell 錯誤,用戶(hù)輸出和用戶(hù)錯誤。 對于 Shell 提示符下或編輯器中的 Python 代碼來(lái)說(shuō)則包括關(guān)鍵字,內置類(lèi)和函數名稱(chēng),classdef 之后的名稱(chēng),字符串和注釋等。 對于任意文本窗口來(lái)說(shuō)則包括光標(如果存在)、找到的文本(如果可能)和選定的文本。

IDLE 還會(huì )高亮顯示模式匹配語(yǔ)句中的 軟關(guān)鍵字 match, case_。 但是,這種高亮顯示并不完美,在某些極端情況下還會(huì )出現錯誤,包括 _case 模式中出現的時(shí)候。

廣西著(zhù)色是在背景上完成的,因此有時(shí)會(huì )看到非著(zhù)色的文本。 要改變顏色方案,請使用配置 IDLE 對話(huà)框的高亮選項卡。 編輯器中的調試器斷點(diǎn)行標記和彈出面板和對話(huà)框中的文本則是用戶(hù)不可配置的。

啟動(dòng)和代碼執行?

在附帶 -s 選項啟用的情況下,IDLE 將會(huì )執行環(huán)境變量 IDLESTARTUPPYTHONSTARTUP 所引用的文件。 IDLE 會(huì )先檢查 IDLESTARTUP;如果 IDLESTARTUP 存在則會(huì )運行被引用的文件。 如果 IDLESTARTUP 不存在,則 IDLE 會(huì )檢查 PYTHONSTARTUP。 這些環(huán)境變量所引用的文件是存放經(jīng)常被 IDLE Shell 所使用的函數,或者執行導入常用模塊的 import 語(yǔ)句的便捷場(chǎng)所。

此外,Tk 也會(huì )在存在啟動(dòng)文件時(shí)加載它。 請注意 Tk 文件會(huì )被無(wú)條件地加載。 此附加文件名為 .Idle.py 并且會(huì )在用戶(hù)的家目錄下查找。 此文件中的語(yǔ)句將在 Tk 的命名空間中執行,所以此文件不適用于導入要在 IDLE 的 Python Shell 中使用的函數。

命令行用法?

idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...

-c command  run command in the shell window
-d          enable debugger and open shell window
-e          open editor window
-h          print help message with legal combinations and exit
-i          open shell window
-r file     run file in shell window
-s          run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
-t title    set title of shell window
-           run stdin in shell (- must be last option before args)

如果有參數:

  • 如果使用了 -, -cr,則放在 sys.argv[1:...]sys.argv[0] 中的所有參數都會(huì )被設為 '', '-c''-r'。 不會(huì )打開(kāi)任何編輯器窗口,即使是在選項對話(huà)框中的默認設置。

  • 在其他情況下,參數為要打開(kāi)編輯的文件而 sys.argv 反映的是傳給 IDLE 本身的參數。

啟動(dòng)失敗?

IDLE 使用一個(gè)套接字在 IDLE GUI 進(jìn)程和用戶(hù)代碼執行進(jìn)程之間通信。 當 Shell 啟動(dòng)或重啟動(dòng)時(shí)必須建立一個(gè)連接。 (重啟動(dòng)會(huì )以一個(gè)內容為 'RESTART' 的分隔行來(lái)標示)。 如果用戶(hù)進(jìn)程無(wú)法連接到 GUI 進(jìn)程,它通常會(huì )顯示一個(gè)包含 'cannot connect' 消息的 Tk 錯誤提示框來(lái)引導用戶(hù)。 隨后將會(huì )退出程序。

有一個(gè) Unix 系統專(zhuān)屬的連接失敗是由系統網(wǎng)絡(luò )設置中錯誤配置的掩碼規則導致的。 當從一個(gè)終端啟動(dòng) IDLE 時(shí),用戶(hù)將看到一條以 ** Invalid host: 開(kāi)頭的消息。 有效的值為 127.0.0.1 (idlelib.rpc.LOCALHOST)。 用戶(hù)可以在一個(gè)終端窗口輸入 tcpconnect -irv 127.0.0.1 6543 并在另一個(gè)終端窗口中輸入 tcplisten <same args> 來(lái)進(jìn)行診斷。

導致連接失敗的一個(gè)常見(jiàn)原因是用戶(hù)創(chuàng )建的文件與標準庫模塊同名,例如 random.pytkinter.py。 當這樣的文件與要運行的文件位于同一目錄中時(shí),IDLE 將無(wú)法導入標準庫模塊。 可用的解決辦法是重命名用戶(hù)文件。

雖然現在已不太常見(jiàn),但殺毒軟件或防火墻程序也有可能會(huì )阻止連接。 如果無(wú)法將此類(lèi)程序設為允許連接,那么為了運行 IDLE 就必須將其關(guān)閉。 允許這樣的內部連接是安全的,因為數據在外部端口上不可見(jiàn)。 一個(gè)類(lèi)似的問(wèn)題是錯誤的網(wǎng)絡(luò )配置阻止了連接。

Python 的安裝問(wèn)題有時(shí)會(huì )使 IDLE 退出:存在多個(gè)版本時(shí)可能導致程序崩潰,或者單獨安裝時(shí)可能需要管理員權限。 如果想要避免程序崩潰,或是不想以管理員身份運行,最簡(jiǎn)單的做法是完全卸載 Python 并重新安裝。

有時(shí)會(huì )出現 pythonw.exe 僵尸進(jìn)程問(wèn)題。 在 Windows 上,可以使用任務(wù)管理員來(lái)檢查并停止該進(jìn)程。 有時(shí)由程序崩潰或鍵盤(pán)中斷(control-C)所發(fā)起的重啟動(dòng)可能會(huì )出現連接失敗。 關(guān)閉錯誤提示框或使用 Shell 菜單中的 Restart Shell 可能會(huì )修復此類(lèi)臨時(shí)性錯誤。

當 IDLE 首次啟動(dòng)時(shí),它會(huì )嘗試讀取 ~/.idlerc/ 中的用戶(hù)配置文件(~ 是用戶(hù)的家目錄)。 如果配置有問(wèn)題,則應當顯示一條錯誤消息。 除隨機磁盤(pán)錯誤之外,此類(lèi)錯誤均可通過(guò)不手動(dòng)編輯這些文件來(lái)避免。 請使用 Options 菜單來(lái)打開(kāi)配置對話(huà)框。 一旦用戶(hù)配置文件出現錯誤,最好的解決辦法就是刪除它并使用配置對話(huà)框重新設置。

如果 IDLE 退出時(shí)沒(méi)有發(fā)出任何錯誤消息,并且它不是通過(guò)控制臺啟動(dòng)的,請嘗試通過(guò)控制臺或終端 (python -m idlelib) 來(lái)啟動(dòng)它以查看是否會(huì )出現錯誤消息。

在基于 Unix 的系統上使用 tcl/tk 低于 8.6.11 的版本 (查看 About IDLE) 時(shí)特定字體的特定字符可能導致終端提示 tk 錯誤消息。 這可能發(fā)生在啟動(dòng) IDLE 編輯包此種字符的文件或是在之后輸入此種字符的時(shí)候。 如果無(wú)法升級 tcl/tk,可以重新配置 IDLE 來(lái)使用其他的字體。

運行用戶(hù)代碼?

除了少量例外,使用 IDLE 執行 Python 代碼的結果應當與使用默認方法,即在文本模式的系統控制臺或終端窗口中直接通過(guò) Python 解釋器執行同樣的代碼相同。 但是,不同的界面和操作有時(shí)會(huì )影響顯示的結果。 例如,sys.modules 初始時(shí)具有更多條目,而 threading.active_count() 將返回 2 而不是 1。

在默認情況下,IDLE 會(huì )在單獨的 OS 進(jìn)程中運行用戶(hù)代碼而不是在運行 Shell 和編輯器的用戶(hù)界面進(jìn)程中運行。 在執行進(jìn)程中,它會(huì )將 sys.stdin, sys.stdoutsys.stderr 替換為從 Shell 窗口獲取輸入并向其發(fā)送輸出的對象。 保存在 sys.__stdin__, sys.__stdout__sys.__stderr__ 中的原始值不會(huì )被改變,但可能會(huì )為 None。

將打印輸出從一個(gè)進(jìn)程發(fā)送到另一個(gè)進(jìn)程中的文本部件要比打印到同一個(gè)進(jìn)程中的系統終端慢。 這在打印多個(gè)參數時(shí)將有更明顯的影響,因為每個(gè)參數、每個(gè)分隔符和換行符對應的字符串都要單獨發(fā)送。 在開(kāi)發(fā)中,這通常不算是問(wèn)題,但如果希望能在 IDLE 中更快地打印,可以將想要顯示的所有內容先格式化并拼接到一起然后打印單個(gè)字符串。 格式字符串和 str.join() 都可以被用于合并字段和文本行。

IDLE 的標準流替換不會(huì )被執行進(jìn)程中創(chuàng )建的子進(jìn)程所繼承,不論它是由用戶(hù)代碼直接創(chuàng )建還是由 multiprocessing 之類(lèi)的模塊創(chuàng )建的。 如果這樣的子進(jìn)程使用了 input 獲取 sys.stdin 或者使用了 printwrite 輸出到 sys.stdout 或 sys.stderr,則應當在命令行窗口中啟動(dòng) IDLE。 這樣二級子進(jìn)程將會(huì )被附加到該窗口進(jìn)行輸出和輸出。

如果 sys 被用戶(hù)代碼重置,例如使用了 importlib.reload(sys),則 IDLE 的修改將丟失,來(lái)自鍵盤(pán)的輸入和向屏幕的輸出將無(wú)法正確運作。

當 Shell 獲得焦點(diǎn)時(shí),它將控制鍵盤(pán)與屏幕。 這通常會(huì )保持透明,但一些直接訪(fǎng)問(wèn)鍵盤(pán)和屏幕的函數將會(huì )不起作用。 這也包括那些確定是否有鍵被按下以及是哪個(gè)鍵被按下的系統專(zhuān)屬函數。

在執行進(jìn)程中運行的 IDLE 代碼會(huì )向調用棧添加在其他情況下不存在的幀。 IDLE 包裝了 sys.getrecursionlimitsys.setrecursionlimit 以減少額外棧幀的影響。

當用戶(hù)代碼直接或者通過(guò)調用 sys.exit 引發(fā) SystemExit 時(shí),IDLE 將返回 Shell 提示符而非完全退出。

Shell中的用戶(hù)輸出?

當一個(gè)程序輸出文本時(shí),結果將由相應的輸出設備來(lái)確定。 當 IDLE 執行用戶(hù)代碼時(shí),sys.stdoutsys.stderr 會(huì )被連接到 IDLE Shell 的顯示區。 它的某些特性是從底層的 Tk Text 部件繼承而來(lái)。 其他特性則是程序所添加的。 總之,Shell 被設計用于開(kāi)發(fā)環(huán)境而非生產(chǎn)環(huán)境運行。

例如,Shell 絕不會(huì )丟棄輸出。 一個(gè)向 Shell 發(fā)送無(wú)限輸出的程序將最終占滿(mǎn)內存,導致內存錯誤。 作為對比,某些系統文本模式窗口只會(huì )保留輸出的最后 n 行。 例如,Windows 控制臺可由用戶(hù)設置保留 1 至 9999 行,默認為 300 行。

A Tk Text widget, and hence IDLE's Shell, displays characters (codepoints) in the BMP (Basic Multilingual Plane) subset of Unicode. Which characters are displayed with a proper glyph and which with a replacement box depends on the operating system and installed fonts. Tab characters cause the following text to begin after the next tab stop. (They occur every 8 'characters'). Newline characters cause following text to appear on a new line. Other control characters are ignored or displayed as a space, box, or something else, depending on the operating system and font. (Moving the text cursor through such output with arrow keys may exhibit some surprising spacing behavior.)

>>>
>>> s = 'a\tb\a<\x02><\r>\bc\nd'  # Enter 22 chars.
>>> len(s)
14
>>> s  # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='')  # Display s as is.
# Result varies by OS and font.  Try it.

repr 函數會(huì )被用于表達式值的交互式回顯。 它將返回輸入字符串的一個(gè)修改版本,其中的控制代碼、部分 BMP 碼位以及所有非 BMP 碼位都將被替換為轉義代碼。 如上面所演示的,它使用戶(hù)可以辨識字符串中的字符,無(wú)論它們會(huì )如何顯示。

普通的與錯誤的輸出通常會(huì )在與代碼輸入和彼此之間保持區分 (顯示于不同的行)。 它們也會(huì )分別使用不同的高亮顏色。

對于 SyntaxError 回溯信息,表示檢測到錯誤位置的正常 '^' 標記被替換為帶有代表錯誤的文本顏色高亮。 當從文件運行的代碼導致了其他異常時(shí),用戶(hù)可以右擊回溯信息行在 IDLE 編輯器中跳轉到相應的行。 如有必要將打開(kāi)相應的文件。

Shell 具有將輸出行折疊為一個(gè) 'Squeezed text' 標簽的特殊功能。 此功能將自動(dòng)應用于超過(guò) N 行的輸出 (默認 N = 50)。 N 可以在設置對話(huà)框中 General 頁(yè)的 PyShell 區域中修改。 行數更少的輸出也可通過(guò)在輸出上右擊來(lái)折疊。 此功能適用于過(guò)多的輸出行數導致滾動(dòng)操作變慢的情況。

已折疊的輸出可通過(guò)雙擊該標簽來(lái)原地展開(kāi)。 也可通過(guò)右擊該標簽將其發(fā)送到剪貼板或單獨的查看窗口。

開(kāi)發(fā) tkinter 應用程序?

IDLE 有意與標準 Python 保持區別以方便 tkinter 程序的開(kāi)發(fā)。 在標準 Python 中輸入 import tkinter as tk; root = tk.Tk() 不會(huì )顯示任何東西。 在 IDLE 中輸入同樣的代碼則會(huì )顯示一個(gè) tk 窗口。 在標準 Python 中,還必須輸入 root.update() 才會(huì )將窗口顯示出來(lái)。 IDLE 會(huì )在幕后執行同樣的方法,每秒大約 20 次,即每隔大約 50 毫秒。 下面輸入 b = tk.Button(root, text='button'); b.pack()。 在標準 Python 中仍然不會(huì )有任何可見(jiàn)的變化,直到輸入 root.update()。

大多數 tkinter 程序都會(huì )運行 root.mainloop(),它通常直到 tk 應用被銷(xiāo)毀時(shí)才會(huì )返回。 如果程序是通過(guò) python -i 或 IDLE 編輯器運行的,則 >>> Shell 提示符將直到 mainloop() 返回時(shí)才會(huì )出現,這時(shí)將結束程序的交互。

當通過(guò) IDLE 編輯器運行 tkinter 程序時(shí),可以注釋掉 mainloop 調用。 這樣將立即回到 Shell 提示符并可與正在運行的應用程序交互。 請記得當在標準 Python 中運行時(shí)重新啟用 mainloop 調用。

在沒(méi)有子進(jìn)程的情況下運行?

在默認情況下,IDLE 是通過(guò)一個(gè)套接字在單獨的子進(jìn)程中執行用戶(hù)代碼,它將使用內部的環(huán)回接口。 這個(gè)連接在外部不可見(jiàn)并且不會(huì )在互聯(lián)網(wǎng)上發(fā)送或接收數據。 如果防火墻仍然會(huì )報警,你完全可以忽略。

如果創(chuàng )建套接字連接的嘗試失敗,IDLE 將會(huì )通知你。 這樣的失敗可能是暫時(shí)性的,但是如果持續存在,問(wèn)題可能是防火墻阻止了連接或某個(gè)系統配置錯誤。 在問(wèn)題得到解決之前,可以使用 -n 命令行開(kāi)關(guān)來(lái)運行 IDLE。

如果 IDLE 啟動(dòng)時(shí)使用了 -n 命令行開(kāi)關(guān)則它將在單個(gè)進(jìn)程中運行并且將不再創(chuàng )建運行 RPC Python 執行服務(wù)器的子進(jìn)程。 這適用于 Python 無(wú)法在你的系統平臺上創(chuàng )建子進(jìn)程或 RPC 套接字接口的情況。 但是,在這種模式下用戶(hù)代碼沒(méi)有與 IDLE 本身相隔離。 而且,當選擇 Run/Run Module (F5) 時(shí)運行環(huán)境也不會(huì )重啟。 如果你的代碼已被修改,你必須為受影響的模塊執行 reload() 并重新導入特定的條目 (例如 from foo import baz) 才能讓修改生效。 出于這些原因,在可能的情況下最好還是使用默認的子進(jìn)程來(lái)運行 IDLE。

3.4 版后已移除.

幫助和偏好?

幫助源?

Help 菜單項 "IDLE Help" 會(huì )顯示標準庫參考中 IDLE 一章的帶格式 HTML 版本。 這些內容放在只讀的 tkinter 文本窗口中,與在瀏覽器中看到的內容類(lèi)似。 可使用鼠標滾輪、滾動(dòng)條或上下方向鍵來(lái)瀏覽文本。 或是點(diǎn)擊 TOC (Table of Contents) 按鈕并在打開(kāi)的選項框中選擇一個(gè)節標題。

Help 菜單項 "Python Docs" 會(huì )打開(kāi)更豐富的幫助源,包括教程,通過(guò) docs.python.org/x.y 來(lái)訪(fǎng)問(wèn),其中 'x.y' 是當前運行的 Python 版本。 如果你的系統有此文檔的離線(xiàn)副本 (這可能是一個(gè)安裝選項),則將打開(kāi)這個(gè)副本。

選定的 URL 可以使用配置 IDLE 對話(huà)框的 General 選項卡隨時(shí)在幫助菜單中添加或移除。

首選項設置?

字體首選項、高亮、按鍵和通用首選項可通過(guò) Option 菜單的配置 IDLE 項來(lái)修改。 非默認的用戶(hù)設置將保存在用戶(hù)家目錄下的 .idlerc 目錄中。 用戶(hù)配置文件錯誤導致的問(wèn)題可通過(guò)編輯或刪除 .idlerc 中的一個(gè)或多個(gè)文件來(lái)解決。

在 Font 選項卡中,可以查看使用多種語(yǔ)言的多個(gè)字符的示例文本來(lái)了解字體或字號效果。 可以編輯示例文本來(lái)添加想要的其他字符。 請使用示例文本選擇等寬字體。 如果某些字符在 Shell 或編輯器中的顯示有問(wèn)題,可以將它們添加到示例文本的開(kāi)頭并嘗試改變字號和字體。

在 Highlights 和 Keys 選項卡中,可以選擇內置或自定義的顏色主題和按鍵集合。 要將更新的內置顏色主題或按鍵集合與舊版 IDLE 一起使用,可以將其保存為新的自定義主題或按鍵集合就將可在舊版 IDLE 中使用。

macOS 上的IDLE?

在 System Preferences: Dock 中,可以將 "Prefer tabs when opening documents" 設為 "Always"。 但是該設置不能兼容 IDLE 所使用的 tk/tkinter GUI 框架,并會(huì )使得部分 IDLE 特性失效。

擴展?

IDLE 可以包含擴展插件。 擴展插件的首選項可通過(guò)首選項對話(huà)框的 Extensions 選項卡來(lái)修改。 請查看 idlelib 目錄下 config-extensions.def 的開(kāi)頭來(lái)了解詳情。 目前唯一的擴展插件是 zzdummy,它也是一個(gè)測試用的示例。