从条目小部件获取一个数字,并通过Python2Tk中按钮调用的函数运行它

从条目小部件获取一个数字,并通过Python2Tk中按钮调用的函数运行它,python,tkinter,Python,Tkinter,好的,首先,这是我第一次尝试GUI,所以请原谅任何额外的混乱或明显的错误(更不用说简单、彻底的新手) 我试图在Tkinter中为Python 2创建一个GUI,它获取电磁辐射的波长(以m/波为单位),并分别以Hz和能量单位/量子计算波的频率和能量 我想通过按下tk中的按钮来选择能量单位,但现在,我从焦耳开始 流程如下所示:波长被传递到输入窗口小部件,按下其中一个x按钮选择返回能量的单位,然后返回频率和能量 到目前为止,我已经做了很多 from __future__ import division

好的,首先,这是我第一次尝试GUI,所以请原谅任何额外的混乱或明显的错误(更不用说简单、彻底的新手)

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

我想通过按下tk中的按钮来选择能量单位,但现在,我从焦耳开始

流程如下所示:波长被传递到输入窗口小部件,按下其中一个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()
我真的不知道该从这里走到哪里,所以如果有人愿意仔细看看并提出建议,我将不胜感激。 谢谢


嗯。。。综上所述,当我把代码放在这里时,它的格式不正确,所以如果有人能解释一下如何在这里使用代码标签…:)

首先,不需要将波长设置为全局。如果将所有窗口初始化放在
main
函数中,则很快就会变得简单:

def main():
    mainwin = tk.Tk()
    mainwin.title("Wave1")
    # ...   
    mainwin.mainloop()
我们可以这样称呼它:

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()