1

次のコードに問題があります。GUI を使用するのはこれが初めてで、Python も使用するのは久しぶりです。ボタンで solfield 関数を実行しようとすると、出力が得られません。

from Tkinter import *
import math

master = Tk()

n = float()
I = float()


def solfield():
    pass



label_coils = Label(text='Number of Coils Per Meter', textvariable=n)
label_coils.grid()
coils = Entry(master)
coils.grid()

label_current = Label(text='Current in Amps', textvariable=I)
label_current.grid()
current = Entry(master)
current.grid()

calculate_button = Button(text='Calculate', command=solfield())
calculate_button.grid()
label_bfield = Label(text='B Field in +z Direction')
label_bfield.grid()
label_result = Label(text='solfield')
label_result.grid()


master.title('Coil Gun Simulation')
master.mainloop()


def solfield():
    mu0 = math.pi*4e-7
    solfield = mu0*n*I
    print solfield

最終的にはもっと多くのコーディングを行う必要があるため、他のヒントもいただければ幸いです。

これは解決されました。誰かが興味を持っている場合は、いくつかの修正が行われた後のコードを次に示します。

from Tkinter import *
import math

master = Tk()

label_coils = Label(text='Number of Coils Per Meter')
label_coils.grid()
coils = Entry(master)
coils.grid()

label_current = Label(text='Current in Amps')
label_current.grid()
current = Entry(master)
current.grid()



def solfield():
    mu0 = math.pi*4e-7
    n = float(coils.get())
    I = float(current.get())
    fieldmag = mu0*n*I
    print fieldmag

calculate_button = Button(text='Calculate', command=solfield)
calculate_button.grid()
label_bfield = Label(text='B Field in +z Direction')
label_bfield.grid()
label_result = Label(text='solfield')
label_result.grid()



master.title('Coil Gun Simulation')
master.mainloop()
4

1 に答える 1

2

問題はここにあります:

calculate_button = Button(text='Calculate', command=solfield())

関数solfield自体を として渡すにはcommand、その名前を使用します。

calculate_button = Button(text='Calculate', command=solfield)

あなたがしていることは、関数を呼び出し、その関数の戻り値をコマンドとして渡すことです。

上記で do-nothing 関数として定義したのでsolfield、その戻り値はNoneであるためcalculate_button、そのcommand=Noneであり、適切に何もしていないことを示しています。


一方、SethMMorton が指摘したように (その後削除されました):

という名前の2 つの関数があり、関数の 1 つでsolfield変数に名前を付けています。空の関数 (パスを含む関数) を削除し、残りの関数で別の変数名を使用します。solfieldsolfield

これは実際の問題を引き起こしているわけではありませんが、問題を見つけるのを難しくする混乱を助長していることは確かです。(たとえば、余分な空の定義をまったく含めていなかった場合、間違った行に a が表示され、デバッグが容易になります。solfield)NameError


それをすべてまとめると、あなたがすべきことは次のとおりです。

  1. の空 (passのみ) の定義を取り除きsolfieldます。
  2. の実際の実装をsolfield、GUI を作成するポイントの上に移動します。
  3. 関数内でローカル変数に名前を付けないでくださいsolfield
  4. forとしてsolfieldではなく、 just を渡します。solfield()commandcalculate_button
于 2013-05-14T23:28:26.363 に答える