2016-12-29 12 views
0

私はtkinterでGUIを学んでいます。IDLEに組み込まれたオートコンプリート関数を使っていますので、特定のオブジェクト/クラス。インスタンス化されたオブジェクトのPython IDLE auto expand

しかし、IDLEのオートコンプリート機能はインスタンス化されたクラス/オブジェクトでは機能しません。たとえば、IDLEエディタ(対話シェルではない):

import tkinter 
from tkinter import ttk 

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

「tkinter.Tk」と入力します。 ctrl + spaceを押すと、オートコンプリートの提案メニューが表示されますが、「root」と入力すると表示されます。 ctrl +スペースを押すと、何も起こりません。どうしてこれなの?

答えて

0

オブジェクトの属性をルックアップするには、そのオブジェクトが存在する必要があります。現在、IDLEのオートコンプリートはオートコンプリート用の新しいオブジェクトを作成しません。あなたが対話的に最初の行はモジュールtkinterは、ユーザープロセス空間に存在することを確認します

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

を入力したとします。 2行目はrootオブジェクトを作成します。 3行目のオートコンプリートでは、新しいrootオブジェクトが使用されます。

エディタに同じ3行を入力すると、F5を押すまでコードは実行されません。オートコンプリートは、ユーザプロセスのスタートアップコード(idlelib/run.py内)と最後のリセット以降にすでに実行されているコードのため、ユーザプロセスに存在するオブジェクトに限定されます。 tkinterは(現在)run.pyによってインポートされています。だからtkinter.オートコンプリート。ただし、rootオブジェクトはありません。

ユーザーのソリューションは、モジュールをインポートしてインスタンスを作成するために、不完全なコードを頻繁に実行することです。 2行目の後にF5キーを押してエディタに戻ると、root.はシェルと同様に自動完成します。

+0

ああ私はこれが理にかなっています。コードが習慣から抜け出した後で私はシェルを閉じていましたが、これは既存のオブジェクト/モジュールが何であるかに関するすべてのデータを消去していたと思います。ありがとう! – Platytude

+0

'root 'に対応するtkウィンドウを閉じると' root'とすべての子孫ウィジェットが破壊されることにも注意してください。編集が完了していない場合は、F5を再起動して既存のウィンドウを閉じ、新しいウィンドウを作成させます。 –

関連する問題