好的,首先,这是我第一次尝试使用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()
我真的不确定从哪里开始,所以如果有人愿意看一遍并提出建议,我会很感激。 谢谢!
嗯...看看这个,当我把它放在这里时,代码没有正确格式化,所以如果有人能解释如何在这里使用代码标签......:)
答案 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()