Python-tkinterのIntVar / entryは0のみを返します

アダムコクラン

tkinterで作ったGUIを使って計算や方程式を解くプログラムを書こうとしていますが、既知の値を入れるところまで来ています。値はtkinterのエントリウィジェットに入力されます(私はStringVar()ではなくIntVar()を使用しているので、問題はありません)が、何らかの理由で、入力した値に関係なく、0としてのみ返されます。以下のコード:

def getvalues_1dk():
    getvalues2frame = ttk.Frame(calculations_root, width=100, height=100, padding="5")
    getvalues2frame['borderwidth'] = 3
    getvalues2frame['relief'] = 'raised'
    getvalues2label = ttk.Label(getvalues2frame, text="Step 5: Enter a value for each of the variables you\n"
                                                      " selected in step 4.")
    getvalues2label.grid(row=1, column=1, sticky=(N, W))
    getvalues2frame.grid(row=0, column=0, sticky=E)
    getvalue1(getvalues2frame)
    return getvalues2frame

def getvalue1(getvalues2frame):
    if known1d1.get() and known1d2.get() and known1d3.get():
        known1d1entryvar = IntVar()
        known1d1entry = ttk.Entry(getvalues2frame, textvariable=known1d1entryvar)
        ttk.Label(getvalues2frame, text=known1d1.get()).grid(row=2, column=1, sticky=W)
        known1d1entry.grid(row=2, column=1, sticky=E)
        ttk.Button(getvalues2frame, text="Confirm",
                   command=(getvalue2(getvalues2frame, known1d1entryvar))).grid(row=3, column=1,
                                                                                sticky=E)
        return known1d1entryvar

def getvalue2(getvalues2frame, known1d1entryvar):
    if known1d1entryvar.get():
        known1d2entryvar = IntVar()
        known1d2entry = ttk.Entry(getvalues2frame, textvariable=known1d2entryvar)
        ttk.Label(getvalues2frame, text=known1d2.get()).grid(row=4, column=1, sticky=W)
        known1d2entry.grid(row=4, column=1, sticky=E)
        ttk.Button(getvalues2frame, text="Confirm",
                   command=(getvalue3(getvalues2frame, known1d1entryvar, known1d2entryvar))).grid(row=5, column=1,
                                                                                                  sticky=E)
        return known1d2entryvar

def getvalue3(getvalues2frame, known1d1entryvar, known1d2entryvar):
    if known1d2entryvar.get():
        known1d3entryvar = IntVar()
        known1d3entry = ttk.Entry(getvalues2frame, textvariable=known1d3entryvar)
        ttk.Label(getvalues2frame, text=known1d3.get()).grid(row=6, column=1, sticky=W)
        known1d3entry.grid(row=6, column=1, sticky=E)
        calculatebutton = ttk.Button(getvalues2frame, text="Show formula and calculate",
                                     command=(
                                         calculate1d(known1d1entryvar, known1d2entryvar, known1d3entryvar,
                                                     solveforvar1d, unusedvar1d)))
        calculatebutton.grid(row=7, column=1, sticky=E)

def calculate1d(known1d1entryvar, known1d2entryvar, known1d3entryvar, solveforvar1d, unusedvar1d):
    if known1d1entryvar.get() and known1d2entryvar.get() and known1d3entryvar.get():
        knownvar1 = known1d1entryvar.get()
        knownvar2 = known1d2entryvar.get()
        knownvar3 = known1d3entryvar.get()
        print(knownvar1, knownvar2, knownvar3)
        solveforvar1d = Symbol(solveforvar1d)
        print(solveforvar1d)
        print(unusedvar1d)

コードのこのセクションは、1)値が入力されるラベル付きフレームを作成する、2)最初の既知の変数の整数値の入力ボックスを作成する、および値を確認して次の入力ボックスを作成するボタンを作成する、3)ボタンが押されたときに次の入力ボックスを作成します。4)2番目の値を確認するために別のボタンを作成し、次の入力ボックスを作成します。5)ボタンが押されたときに3番目の入力ボックスを作成し、関数calculate1d( )、これは現在、プログラムが正しい値を返すかどうかを確認するためのプレースホルダーです。

ただし、機能しません。最初の値の入力ボックスを作成し、2番目の入力ボックスとボタンを確認して作成するためのボタンを作成すると、コードはそのまま停止します。このコードでは、入力ボックスにどのような値が返されるかを実際に確認することはできません。しかしprint(known1d1entryvar.get())、最初にput put putを入れて、getvalue2()どの値が返されるかを確認してみました。どの値を入力しても、0が返されました。さらに、呼び出すボタン(図示せず)を押すと、値0が出力されました。getvalues_1dk()最初の入力ボックスに数値を入力して最初のボタンを押した後関数。

ここで私を助けてください。私はこれに約2日間立ち往生していて、考えられるすべてのことを試しました。

編集:必要に応じて、ソースコード全体を貼り付けWebサイトに投稿できます。必要に応じて聞いてください。

ブライアン・オークリー

ttkエントリウィジェットは、tkエントリウィゲットよりもガベージコレクションの影響を受けやすくなっています。にローカル変数を使用していますIntVarそれらがガベージコレクションされないようにする必要があります。さらに良いことに、それらをまったく使用しないでください。

ほとんどの場合、ウィジェットを使用しStringVarたりIntVarEntryウィジェットを使用したりする必要はまったくありませんウィジェットがなくても、ウィジェットに値を入れたり、ウィジェットから値を取得したりできます。それらは、実際の利益を与えることなく、維持しなければならない余分なオブジェクトを追加するだけです。それらが役立つのは、同じ変数を複数のウィジェットに使用する場合、または変数にトレースを配置する場合のみです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

(Python 3.4 Tkinter)IntVar / StringVarの問題

分類Dev

Python 3.4.3tkinter-IntVarまたはその他のtkinterデータ型の宣言時にプログラムがフリーズする

分類Dev

Pythonは値のみを返します

分類Dev

Python MySqlDBstore_resultは1行のみを返します

分類Dev

PythonのPopen +通信は、stdoutの最初の行のみを返します

分類Dev

Python-セットの共通部分は最初の値のみを返します

分類Dev

Python:リストの反復は最後の値のみを返します

分類Dev

ForループはPythonの最後の要素のみを繰り返します

分類Dev

Python 2.7:特定の桁数に対して0〜9の数字のすべての可能な組み合わせを返す方法はありますか?

分類Dev

tkinterで、ゼロパディングを使用しているときにIntVar / Entryの組み合わせが間違った整数を返すのはなぜですか?

分類Dev

python OpenCvIMREAD_UNCHANGEDは3つのチャネルのみを返します

分類Dev

Python3-forループは1回の反復のみを返します

分類Dev

Pythonループrequests.get()は最初のループのみを返します

分類Dev

python list max()メソッドは3桁の数字のみを返しますか?

分類Dev

python ifelseステートメントは最初の条件のみを返します

分類Dev

Pythonは一意の要素の組み合わせを返します

分類Dev

Pythonループは1つの結果のみを返します

分類Dev

Pythonコードでのマージソートは[0]を返します

分類Dev

Pythonはチームの組み合わせを繰り返します

分類Dev

Python 関数はインデックスのみを返します

分類Dev

pythonは、forの場合に書き込み、1行でtrue / falseを返します

分類Dev

Laravel DB :: updateは0または1のみを返します

分類Dev

Pythonは日付にintを追加し、週末を無視して平日の日付のみを返します

分類Dev

Pythonの文字列から文字のみを返します

分類Dev

Python-Tkinter-Ttk ComboBox-空の文字列を返す関数を取得します(長さ= 0)

分類Dev

Python、Pandas:欠損値を持つ行のみを返します

分類Dev

document.body.scrollTop Firefoxは0を返します:JSのみ

分類Dev

GLES10.glGetIntegervはLollipopでのみ0を返します

分類Dev

$ sessionデータは0のみを返します

Related 関連記事

  1. 1

    (Python 3.4 Tkinter)IntVar / StringVarの問題

  2. 2

    Python 3.4.3tkinter-IntVarまたはその他のtkinterデータ型の宣言時にプログラムがフリーズする

  3. 3

    Pythonは値のみを返します

  4. 4

    Python MySqlDBstore_resultは1行のみを返します

  5. 5

    PythonのPopen +通信は、stdoutの最初の行のみを返します

  6. 6

    Python-セットの共通部分は最初の値のみを返します

  7. 7

    Python:リストの反復は最後の値のみを返します

  8. 8

    ForループはPythonの最後の要素のみを繰り返します

  9. 9

    Python 2.7:特定の桁数に対して0〜9の数字のすべての可能な組み合わせを返す方法はありますか?

  10. 10

    tkinterで、ゼロパディングを使用しているときにIntVar / Entryの組み合わせが間違った整数を返すのはなぜですか?

  11. 11

    python OpenCvIMREAD_UNCHANGEDは3つのチャネルのみを返します

  12. 12

    Python3-forループは1回の反復のみを返します

  13. 13

    Pythonループrequests.get()は最初のループのみを返します

  14. 14

    python list max()メソッドは3桁の数字のみを返しますか?

  15. 15

    python ifelseステートメントは最初の条件のみを返します

  16. 16

    Pythonは一意の要素の組み合わせを返します

  17. 17

    Pythonループは1つの結果のみを返します

  18. 18

    Pythonコードでのマージソートは[0]を返します

  19. 19

    Pythonはチームの組み合わせを繰り返します

  20. 20

    Python 関数はインデックスのみを返します

  21. 21

    pythonは、forの場合に書き込み、1行でtrue / falseを返します

  22. 22

    Laravel DB :: updateは0または1のみを返します

  23. 23

    Pythonは日付にintを追加し、週末を無視して平日の日付のみを返します

  24. 24

    Pythonの文字列から文字のみを返します

  25. 25

    Python-Tkinter-Ttk ComboBox-空の文字列を返す関数を取得します(長さ= 0)

  26. 26

    Python、Pandas:欠損値を持つ行のみを返します

  27. 27

    document.body.scrollTop Firefoxは0を返します:JSのみ

  28. 28

    GLES10.glGetIntegervはLollipopでのみ0を返します

  29. 29

    $ sessionデータは0のみを返します

ホットタグ

アーカイブ