1

GUIを作成していますが、変数で何かが起こっています。

それは、値シータを計算することから始まります。これは、ボタンをクリックすると、入力フィールドに渡されます(これは関数に書き込まれます:) thetaVar.set(CalcTheta(grensVar.get(), data[:,1], data[:,2]))

thetaVar = IntVar()

def callbackTheta(name, index, mode):
    thetaValue = nGui.globalgetvar(name)
    nGui.globalsetvar(name, thetaValue)

wtheta = thetaVar.trace_variable('w', callbackTheta)
rtheta = thetaVar.trace_variable('r', callbackTheta)

entryTheta = Entry(textvariable=thetaVar).place(x=90, y=202)

これは機能しますが([入力]フィールドに値が表示されます)、後でこの値を取得しようとすると機能しません。私はすべてを試したと思います:

thetaVar.get()   # with print, returns the integer 0, this is the initial value 
                 # that is displayed, even though at that moment it shows 0.4341.
thetaVar         # with print, returns 'PY_VAR3'
thetaValue       # with print, global value not defined
entryTheta.get() # AttributeError: 'NoneType' object has no attribute 'get'
rtheta           # print returns: 37430496callbackTheta

この値がどこに格納されているのか、別の関数でエントリの値をどのように使用できるのかわかりません。実際の直後にこれらのいずれかを試しても.set、エントリのこの特定の値を直後に印刷できないようです。

Windows8でのtkinterとPython3.3の使用。

4

1 に答える 1

2

エントリウィジェットの値を取得するには、次の2つの方法があります。

  1. getウィジェットでメソッドを呼び出します。例:the_widget.get()
  2. textvariableが割り当てられている場合は、textvariableのgetメソッドを呼び出すことができます。例:the_variable.get()

これらのいずれかが機能するには、1)ウィジェット、または2)テキスト変数のいずれかへの参照が必要です。

あなたのコードでは、ウィジェットの作成とウィジェットのレイアウトを組み合わせるというよくある間違いを犯しています。これにより、entryThetaに設定されNoneます。

のようなことをするとfoo=bar().baz()、格納されるfooのは最終関数の結果ですbaz()。したがって、を実行するとentryTheta = Entry(textvariable=thetaVar).place(x=90, y=202)、は常にになるentryTheta呼び出しの結果に設定されます。placeNone

place簡単な解決策は、別のステートメントを呼び出すことです(また、 place-の使用を真剣に再検討する必要がpackありgridます。これははるかに強力で、サイズ変更の動作が向上します)。

于 2013-03-18T14:06:57.633 に答える