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