Python 将整数指定给选项菜单
我已尝试将整数值指定给我的选项菜单。当我尝试从calculate函数计算总和时,只计算bmr和tef,我使用字典存储与optionmenus选项相关的值Python 将整数指定给选项菜单,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我已尝试将整数值指定给我的选项菜单。当我尝试从calculate函数计算总和时,只计算bmr和tef,我使用字典存储与optionmenus选项相关的值 from tkinter import * from tkinter import ttk root = Tk() root.title("Calorie Calculator") mainframe = ttk.Frame(root) mainframe.grid(column = 0, row = 0) root.c
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Calorie Calculator")
mainframe = ttk.Frame(root)
mainframe.grid(column = 0, row = 0)
root.columnconfigure(0, weight = 1)
root.rowconfigure(0, weight = 1)
ttk.Label(mainframe, text = "Weight").grid(column = 0, row = 0)
ttk.Label(mainframe, text = "Enter weight in kilos").grid(column = 2, row = 0)
ttk.Label(mainframe, text = "BMR is").grid(column = 0, row = 1)
ttk.Label(mainframe, text = "TEF is").grid(column = 0, row = 2)
ttk.Label(mainframe, text = "EEE").grid(column = 0, row = 3)
Label(mainframe, text = "Enter excersise activity").grid(column = 2, row = 3)
ttk.Label(mainframe, text = "NEAT").grid(column = 0, row = 4)
Label(mainframe, text = "Does your job require you to be physically active?").grid(column = 2, row = 4)
bmr = StringVar()
ttk.Label(mainframe, textvariable = bmr).grid(column = 1, row = 1)
tef = StringVar()
ttk.Label(mainframe, textvariable = tef).grid(column = 1, row = 2)
tdee = StringVar()
ttk.Label(mainframe, textvariable = tdee).grid(column = 1, row = 6)
exercise_vals = {"Light": 250, "Moderate": 325, "Advanced": 425, "Athlete": 500}
exercise = StringVar()
drop_eee = OptionMenu(mainframe, exercise, *exercise_vals).grid(column = 1, row = 3)
job_activity_vals = {"Yes": 250, "No": 500}
job_activity = StringVar()
drop_neat = OptionMenu(mainframe, job_activity, *job_activity_vals).grid(column = 1, row = 4)
weight = StringVar()
weight_entry = ttk.Entry(mainframe, textvariable = weight).grid(column = 1, row = 0)
def calculate(*args):
try:
weight_val = float(weight.get())
bmr_val = weight_val * 20
bmr_val = bmr.set(bmr_val)
tef_val = float(bmr.get()) * 0.1
tef_val = tef.set(tef_val)
eee_val = float(exercise.get())
neat_val = float(job_activity.get())
tdee_val = bmr_val + tef_val + eee_val + neat_val
tdee_val = tdee.set(tdee_val)
except ValueError:
pass
ttk.Button(mainframe, text = "Calculate TDEE", command = calculate).grid(column = 2, row = 5)
root.mainloop()
由于您使用了
尝试/except
忽略浮动(exercise.get())
和浮动(job\u activity.get())
上发生的值错误。这就是为什么没有得到tdee
的结果
引发的ValueError
是由于:
exercise.get()
将返回类似于Light
、mediate
等的内容
job\u activity.get()
将返回类似Yes
或No
因此,对这些值使用float()
将引发ValueError
您应该从字典练习值
和作业活动值
中获取值
还包括以下行:
bmr\u val=bmr.set(bmr\u val)
tef_val=tef.set(tef_val)
将None
分配给bmr\u val
和tef\u val
下面是修改后的calculate()
,以解决上述问题:
def计算(*args):
尝试:
weight\u val=float(weight.get())
bmr_val=重量_val*20
bmr.set(bmr_val)
tef_val=float(bmr.get())*0.1
tef.set(tef_val)
eee_val=float(exercise_val[exercise.get()])#从字典中获取值
neat_val=float(作业活动[作业活动.get())#从字典中获取值
tdee_val=bmr_val+tef_val+eee_val+neat_val
tdee.set(tdee_val)
除ValueError为e外:
#最好显示错误消息,而不是忽略它
打印(“ValueError”,e)
try将忽略发生的错误。将其删除并编码,然后仅在适当设置下使用。这里发生了很多错误。从ValueError
开始直到TypeError
。您应该首先尝试了解所有这些意味着什么,然后从头开始编写代码。你还忘了用字典做索引。