基本上,这是我的代码:
#Imports Tk gui syntax
from Tkinter import *
#Creates App class
class App(Tk):
#Initiates class
def __init__(self):
#Initiates Tk
Tk.__init__(self)
#Creates title of app
self.title("BMI Calculator")
#adds extra line for a cleaner gui
self.fillerLine = Label(self, text = "")
self.fillerLine.grid(row=0, column=0)
#asks user for height
self.hgtOutput = Label(self, text = "What is your height (in inches)? :")
self.hgtOutput.grid(row=1, column=0)
#user inputs height in inches using a slider
self.hgtInput = Scale(self, from_=0, to=96, orient=HORIZONTAL, length=450)
self.hgtInput.pack()
self.hgtInput.grid(row=1, column=1)
#button asking user to confirm height
self.btnConfirmHGT = Button(self, text = "Confirm Your Hegiht", command = self.confirmHGT)
self.btnConfirmHGT.grid(row=3, column=0)
#prints the height the user input in feet and inches
self.printHGT = Label(self, text = "\n\n")
self.printHGT.grid(row=3, column=1)
#extra line for cleaner gui
self.fillerLine = Label(self, text = "-------------------------------------------------------------------------------------")
self.fillerLine.grid(row=4, column=0, columnspan=2)
#asks user for weight in pounds
self.wghtOutput = Label(self, text = "What is your weight (in pounds)? :")
self.wghtOutput.grid(row=5, column=0)
#user inputs weight using a slider
self.wghtInput = Scale(self, from_=0, to=400, orient=HORIZONTAL, length=450)
self.wghtInput.pack()
self.wghtInput.grid(row=5, column=1)
#button to start calculations
self.btnCalc = Button(self, text = "Calculate", command = self.calculate)
self.btnCalc.grid(row=6, columnspan=2)
#extra line for cleaner gui
self.fillerLine = Label(self, text = "---------------------------------------------")
self.fillerLine.grid(row=7, column=0, columnspan=2)
#prints users BMI
self.tellBMI = Label(self, text = "")
self.tellBMI.grid(row=8, column=0, columnspan=2)
#prints what category the user is in, underweight, normal, overweight, obese
self.catBMI = Label(self, text = "")
self.catBMI.grid(row=9, column=0, columnspan=2)
#extra line for cleaner gui
self.fillerLine = Label(self, text = "---------------------------------------------")
self.fillerLine.grid(row=10, column=0, columnspan=2)
self.mainloop()
#function to make sure the user put in the correct height
def confirmHGT(self):
feet = (self.hgtInput.get())/12
inches = (self.hgtInput.get())%12
#print the height the user input
self.printHGT["text"] = "\nYou're height is : %s ft. & %s in. \n" % (feet, inches)
#function that calculates BMI and places it within a category
def calculate(self):
#Formula calculating BMI using the height and weight given by the user
BMI = ((self.wghtInput.get()/float(self.hgtInput.get() ** 2))*703)
#Prints users BMI
self.tellBMI["text"] = "You're BMI is:\n %2.1f\n" % (BMI)
#
if BMI < 18.5:
self.catBMI["text"] = "Grab a cheeseburger! You are underweight."
elif BMI >= 18.5 and BMI <= 24.9:
self.catBMI["text"] = "Congratulations! You are normal!"
elif BMI >= 25.0 and BMI <= 29.9:
self.catBMI["text"] = "Maybe eat some salad! You are overweight."
elif BMI >= 30.0:
self.catBMI["text"] = "Hit the treadmills! You are obese."
else:
pass
#creates an instance of the App() class
def main():
a = App()
#runs main() function
if __name__ == "__main__":
main()
代码运行完全正常,我想做什么,我只是想做一些小的改进来学习。我想要做的是,如果BMI处于体重不足的范畴,给“加入一个芝士汉堡!你体重不足。”声明黄色背景。如果在正常类别中,请“恭喜!你很正常!”声明绿色背景。如果在超重类别中,黄色背景,而肥胖类别为红色背景。全部保持正常背景,直到按下计算按钮。
我试过了,
tag_add()
tag_config()
但我似乎无法弄清楚,并且不知道下一步该去哪里!
答案 0 :(得分:3)
好吧,只需在更改文本属性时设置background
属性:
if BMI < 18.5:
self.catBMI["text"] = "Grab a cheeseburger! You are underweight."
self.catBMI["background"] = "yellow"
elif BMI >= 18.5 and BMI <= 24.9:
self.catBMI["text"] = "Congratulations! You are normal!"
self.catBMI["background"] = "green"
elif BMI >= 25.0 and BMI <= 29.9:
self.catBMI["text"] = "Maybe eat some salad! You are overweight."
self.catBMI["background"] = "orange"
elif BMI >= 30.0:
self.catBMI["text"] = "Hit the treadmills! You are obese."
self.catBMI["background"] = "red"
else:
pass
顺便说一下。我认为你不应该在self.mainloop
方法中调用__init__
。这样做会阻止它离开那种方法,这似乎是不对的。相反,请在初始化应用后调用mainloop
:
def main():
a = App()
a.mainloop()
作为进一步说明,您的if / else结构正在进行超出必要的检查。如果您首先检查BMI < 18.5
是否 ,那么BMI >= 18.5
自动为真。所以你可以省略elif
的所有第一次检查,因为它们是自动的,因为之前的情况并非如此。同样,永远不会执行else
块。所以就是这样:
if BMI < 18.5:
self.catBMI["text"] = "Grab a cheeseburger! You are underweight."
self.catBMI["background"] = "yellow"
elif BMI <= 24.9:
self.catBMI["text"] = "Congratulations! You are normal!"
self.catBMI["background"] = "green"
elif BMI <= 29.9:
self.catBMI["text"] = "Maybe eat some salad! You are overweight."
self.catBMI["background"] = "orange"
else:
self.catBMI["text"] = "Hit the treadmills! You are obese."
self.catBMI["background"] = "red"