2017-11-16 10 views
1

すべてのウィジェットにtkinter.widget.configure(text="our text")を使用できないのですか?それはvar_clsがより簡単な方法/クラスなどの間で共有することができることをいつ変数クラスを使用するのですか? (BooleanVar、DoubleVar、IntVar、StringVar)

var_cls = tkinter.StringVar() 
tkinter.widget.configure(textvariable=var_cls) 

です:利点、または使用する主な目的は何ですか?変数クラスと


例:変数クラスなし

import tkinter as tk 
root = tk.Tk() 
var = tk.StringVar(value="This will be on the label.") 
tk.Label(root, textvariable=var).pack() 
root.mainloop() 

例:

import tkinter as tk 
root = tk.Tk() 
tk.Label(root, text="This will be on the label.").pack() 
root.mainloop() 
+1

同じ 'StringVar'を' Label'と 'Entry'に割り当てることができ、' Entry'のテキストを変更すると自動的に 'Label'のテキストを変更します。 – furas

答えて

4

tkinterアプリケーションでは、StringVar(同様にIntVar,BooleanVar、およびDoubleVar)はほとんど必要ありません。基礎となるtcl/tkインタプリタはすべての変数に特別な機能を提供するので、これらの機能を利用するためにこれらのラッパーが存在します。

これらの変数が持っている二つの大きな利点があります:

  1. 二つ以上のウィジェットは、あなたができる
  2. 同じ情報を正確にすべての時間を表示するようにしますが、複数のウィジェットで一つの変数を関連付けることができます値が変更されたときに呼び出される関数をバインドします。

私の意見では、特にこれらの2つの機能のいずれかが必要でない限り、使用しないでください。ウィジェットの値を取得または設定する必要がある場合は、ウィジェット自体でそれを行うメソッドがあります(entry_widget.insert(...)、label_widget.configure(text = '...')など) 。

上記の2つの機能を利用しない限り、管理する必要のある追加のオブジェクトを導入することで、追加のメリットはありません。

1

StringVarウィジェットにバインドすることができますので、あなただけのハンドルを持っている必要がありますStringVarとその値を変更することができます自動的に更新されます。それ以外の場合は、ウィジェット自体にハンドルを保持し、イベントループなどを処理する必要があります。値が変更される可能性がある場合は、基本的にStringVarなどを使用する必要があります。それが静的になるなら、あなたはそれを必要としません。

+0

さて、公正であるためには、ウィジェットのハンドルまたは変数のハンドルを保持する必要があります。どちらの場合も、値を更新するには、関数を保持し、処理し、呼び出す必要があります。 –

関連する問題