2

私はTkinterを初めて使用し、変数を設定する次の方法のどれがより望ましいか疑問に思っていました:

class App():
    def __init__(self,master):
        self.var1 = StringVar()
    <filler>
    def openFile(self,button_type):
        name = tkFileDialog.askopenfilename()
        if button_type == 1:
            self.var1.set(name)

また

class App():
    def __init__(self,master):
        self.var1 = ""
    <filler>
    def openFile(self,button_type):
        name = tkFileDialog.askopenfilename()
        if button_type == 1:
            self.var1 = name

最初のオプションは、私が effbot のドキュメント ( http://effbot.org/tkinterbook/variable.htm ) で見つけたものですが、2 番目のオプションは私が通常行うことです。私の最大の質問は、なぜ一方が他方よりも好まれるのかということです。

4

1 に答える 1

3

StringVar のような Tkinter 変数は、その値の変更を追跡したり、一部のウィジェットを作成するためのvariableorオプションとして渡したりするためによく使用されます。参照したページの「変数クラスをいつ使用するか」textvariableセクションから:

変数は、入力された値の変更を追跡するために、ほとんどのエントリ ウィジェットで使用できます。Checkbutton および Radiobutton ウィジェットが正しく機能するには、変数が必要です。

変数を使用して、エントリ ウィジェットの内容を検証したり、ラベル ウィジェットのテキストを変更したりすることもできます。

したがって、あなたの場合、自然な解決策は2番目のものになります。askopenfilename()別のステートメントの結果と同じように結果を保存したいようですが、ウィジェットのテキストとやり取りしたり、 StringVar の値が変更されました (その関数を呼び出しているため、いつ更新されるかは既にわかっています)。

于 2013-05-24T08:29:36.693 に答える