1. ホーム
  2. python

[解決済み] Tkinterの変数トレースメソッドのコールバックの引数は何ですか?

2022-02-11 13:20:53

質問

PythonにはTkinterの変数に対応したクラスがある StringVar() , BooleanVar() など。これらはすべて、メソッドを共有する get() , set(string) および trace(mode, callback) . その callback の第2引数として渡される関数 trace(mode, callback) には4つの引数が渡されます。 self, n, m, x .

の例では BooleanVar() のように見えます。 '', 'PYVAR0', 'w' .

第3引数 x はトレースのトリガーとなったモードのようで、私の場合、変数が変更されました。しかし、空の文字列のように見える最初の変数は何でしょうか?2つ目は何でしょうか?もし私が推測するならば、変数のための何らかの内部名でしょうか?

解決方法は?

第一引数 は内部変数名です。この名前を引数としてtkinterの getvarsetvar メソッドを使用します。変数に名前をつけると (例: StringVar(name='foo') そうでない場合は、tkinterが生成した名前になります (例: PYVAR0 )

第一引数がリスト変数を表す場合(tkinterでは可能性は極めて低い)。 第2引数 はそのリストへのインデックスになります。スカラ変数の場合、第2引数は空文字列になります。

第3引数 は操作で、変数の読み込み、書き込み、削除に同じ方法を使う場合に便利です。この引数は、どの操作でコールバックを起動したかを示すものです。これは、"read", "write", または "unset" のうちの1つになります。

Tkinterはtcl/tkインタプリタをPythonで包んだものです。変数トレースに関する決定的なドキュメントは、ここにあります。 http://tcl.tk/man/tcl8.5/TclCmd/trace.htm#M14 . しかし、これは内部トレースがどのように動作するかのドキュメントに過ぎず、tkinterのラッパーはデータを加工することがあります。