从Entry小部件中获取一个数字,并通过Python 2 Tk中的按钮调用的函数运行它

时间:2015-04-18 16:40:45

标签: python tkinter

好的,首先,这是我第一次尝试使用GUI,所以请原谅任何额外的混乱或明显的错误(更不用说普通的,平坦的新闻)。 :)

我试图在Tkinter中为Python 2创建一个GUI,它获取EM辐射的波长(以m /波为单位),并计算波的频率和能量,单位为Hz和energy-unit /量子,分别。

我希望能够通过按下tk中的按钮来选择能量单位,但是现在,我从Joules开始。

流程将如下所示:波长被传递到条目小部件中,按下一个x按钮以选择返回能量的单位,然后返回频率和能量。

到目前为止,我做了这么多

from __future__ import division
import Tkinter as tk
mainwin = tk.Tk()
mainwin.title("Wave1")

#Input label
v = tk.IntVar()
ent = tk.Entry(mainwin, textvariable = v)
ent.pack()

wavelength = v.get()

def Joules(wavelength):
    global wavelength
    freq =  (299792458)/wavelength
    Energy = 6.62606957E-34 * freq
    print freq
    print Energy

b1 = tk.Button(mainwin, text="Joules", command= lambda wavelength: Joules(wavelength))
b1.pack()

mainwin.mainloop()

我真的不确定从哪里开始,所以如果有人愿意看一遍并提出建议,我会很感激。 谢谢!

嗯...看看这个,当我把它放在这里时,代码没有正确格式化,所以如果有人能解释如何在这里使用代码标签......:)

1 个答案:

答案 0 :(得分:2)

首先,您不需要使波长全局化。如果您将所有窗口初始化放在main函数中,那么它会很快变得更容易:

def main():
    mainwin = tk.Tk()
    mainwin.title("Wave1")
    # ...   
    mainwin.mainloop()

normal convention是以这种方式调用它:

if __name__ == "__main__":
    main()

我还在按钮设置代码中设置了command=lambda: joules(input_label.get())joules函数可以直接从输入字段获取波长。

当您构建代码时,应该更容易继续添加单选按钮等等。

在下面的完整代码中,我已经使焦耳功能采用了额外的标签输入,因此可以设置结果。它可能不是最佳代码,但应该足以帮助您开始。

from __future__ import division
import Tkinter as tk

def joules(wavelength, freq_out, energy_out):
    freq = 299792458 / wavelength
    energy = 6.62606957e-34 * freq

    freq_out.set("Frequency: %g" % freq)
    energy_out.set("Energy: %g" % energy)

def main():
    mainwin = tk.Tk()
    mainwin.title("Wave1")

    wavelength = tk.IntVar()
    tk.Entry(mainwin, textvariable=wavelength).pack()

    freq = tk.StringVar()
    tk.Label(mainwin, textvariable=freq).pack()

    energy = tk.StringVar()
    tk.Label(mainwin, textvariable=energy).pack()

    button = tk.Button(mainwin, text="Joules", command=lambda:
                joules(wavelength.get(), freq, energy)).pack()

    mainwin.mainloop()

if __name__ == "__main__":
    main()