我的以下代码存在一些问题。这是我第一次使用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()

最佳答案

问题在这里:

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


要将函数solfield本身作为command传递,只需使用其名称:

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


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

由于您在上面将solfield定义为不执行任何功能,因此返回值是None,因此您要告诉calculate_button它的command=None,并且它什么也不做。



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


  您有两个名为solfield的函数,并且正在其中一个solfield函数中命名变量solfield。删除空函数(带有传递的函数),并在其余函数中使用其他变量名。


这并没有引起您的实际问题,但是肯定会加剧混乱,使您更难发现问题。 (例如,如果您根本没有包含多余的solfield空定义,则可能会在错误的行中得到NameError,这将使调试变得更容易。)



综合考虑,您应该做的是:


摆脱pass的空(仅solfield)定义。
solfield的实际实现上移到构建GUI的位置上方。
不要在函数内命名局部变量solfield
仅传递solfield,而不传递solfield()作为commandcalculate_button

09-27 13:44