2016-12-29 45 views
0

我正在用tkinter學習GUI,並且我一直使用IDLE中內置的自動完成功能,以便我不必經常查看有關某些對象/類。Python IDLE自動擴展實例化對象

但是,我有一個問題,其中IDLE的自動完成功能不適用於實例化的類/對象。例如,在IDLE編輯器(而不是交互式shell)中:

import tkinter 
from tkinter import ttk 

root = tkinter.Tk() 
root.title('Some title') 

如果我輸入「tkinter.Tk」。然後按Ctrl +空格鍵,它會彈出自動填充建議菜單,但是如果我鍵入「root」。然後按Ctrl +空格鍵,什麼都不會發生。爲什麼是這樣?

回答

0

爲了查找對象上的屬性,該對象必須存在。目前,IDLE的自動完成不會爲自動完成創建新的對象。假設你交互模式下輸入

>>> import tkinter 
>>> root = tkinter.Tk() 
>>> root. 

第一行可確保模塊tkinter用戶過程中存在空間。第二行創建一個root對象。第三行的自動完成使用新的root對象。

如果在編輯器中鍵入相同的3行,則直到按F5時纔會執行代碼。由於用戶進程啓動代碼(在idlelib/run.py中)以及自上次重置以來已經運行的任何代碼,自動完成僅限於用戶進程中存在的任何對象。碰巧,tkinter(當前)是由run.py導入的。所以tkinter. autocompletes。但是,沒有root對象。

用戶解決方案是經常運行不完整的代碼來導入模塊並創建實例。如果您在第二行後點擊F5並返回編輯器,則root.將自動完成,如在Shell中。

+0

啊我明白了,這是有道理的。在代碼退出習慣後,我正在關閉shell,我猜這是沖刷了關於現有對象/模塊的所有數據。謝謝! – Platytude

+0

另請注意,關閉對應於'root'的tk窗口會破壞'root'和所有後代小部件。如果您沒有完成編輯,請讓F5重新啓動關閉現有窗口並創建一個新窗口。 –