2017-11-15 49 views
0

私は、Python でTCLを実行するために、PythonのTkinterをを使用しているとTCLコマンドを実行するには2つの方法があります。PythonのTkinterのパッケージtk.callのevalの

import tkinter 
root = tkinter.Tk() 
root.eval("winfo exists .l0") 
root.tk.call("winfo exists .l0") 

彼らは同じ意味

を持っていますが、何が違うの? そして私は、ウィジェット名.l0 を定義していないと私は直接

child = ".l0" 
child.winfo_exists() 

使用することができますか? Pythonは

答えて

0

を「strが何の属性がwinfo_existsていない」の違いはcallevalが最初にそれを解析し、それを実行することで、文字列を評価します別の単語としてTCLする各引数を渡すことである私に言ったので。すなわち

、これ:

root.eval("winfo exists .l0") 

...が、これに機能的に同一である:エラーメッセージ'str' object has no attribute 'winfo_exists'として

root.tk.call("winfo", "exists", ".l0") 

、それはまさにそれを意味します。 "l0"は組み込みのtclインタプリタのオブジェクトの名前ですが、Pythonの"l0"は単なる文字列であり、Pythonの文字列は属性winfo_existsを持っていません。

+0

.l0という名前のウィンドウをタイプしないでテストする必要がある場合は、その対処方法を知っていますか? – shuji

+0

@ shuji:私はあなたの質問を理解していません。 ".l0"はtclの世界では型を持っていません。 tclでは、すべてが文字列です。私はあなたがしたいことができると確信していますが、私はあなたが望むものを理解することはできません。 –

+0

私が言っていることは、希望では(tclシェル)、「winfo exists .l0」とタイプすることができますが、どうすればそれをPythonで行うことができますか? .l0未知のウィジェット(topleve、フレームなどではない) – shuji

関連する問題