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)

您正在做的是调用该函数,然后将该函数的返回值作为命令传递。

由于您在solfield上面定义为无操作函数,因此返回值是None,所以您告诉calculate_buttoncommand=None,它正确地什么都不做。


同时,正如 SethMMorton 指出的(但随后被删除):

您有两个名为 的函数solfield,并且您solfield在其中一个solfield函数中命名了一个变量。删除空函数(带有 pass 的函数),并在剩余函数中使用不同的变量名。

这不会导致您的实际问题,但它肯定会增加混乱,使您更难找到问题。(例如,如果你根本没有包含多余的空定义solfield,你会在不正确的行中得到 a NameError,这会使事情更容易调试。)


综上所述,您应该做的是:

  1. 摆脱. pass_solfield
  2. 将真正的实现移到solfield构建 GUI 的位置之上。
  3. 不要solfield在函数中命名局部变量。
  4. 传刚solfield,不solfield()为所commandcalculate_button
于 2013-05-14T23:28:26.363 回答