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
たりIntVar
、Entry
ウィジェットを使用したりする必要はまったくありません。ウィジェットがなくても、ウィジェットに値を入れたり、ウィジェットから値を取得したりできます。それらは、実際の利益を与えることなく、維持しなければならない余分なオブジェクトを追加するだけです。それらが役立つのは、同じ変数を複数のウィジェットに使用する場合、または変数にトレースを配置する場合のみです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加