python - 如何使用组合框(Tkinter)制作 if 语句
问题描述
带有 Combobox 的 If 语句
我正在制作使用 GUI 计算 BMI 的应用程序,并且我为选择性别(男性、女性、儿童)制作了组合框,并且您知道 BMI 结果(肥胖或体重不足......)在男性、女性和儿童之间会有所不同所以我想当用户选择性别时......如果选择的性别是男性将打印正常(18-25)并且当用户选择性别是孩子时正常是(14-18)等等......请帮我做那...我的代码是用python写的 谢谢!
from tkinter import *
import tkinter as tk
from tkinter import ttk
class App(Tk):
def __init__(self):
self.window = Tk()
self.window.title ("BMI")
self.label = Label(self.window, text="Enter your wight (kg) ").pack()
self.kg= StringVar()
Entry(self.window, textvariable=self.kg).pack()
self.label = Label (self.window, text="Enter your hight (m)").pack ()
self.m= StringVar ()
Entry (self.window, textvariable=self.m).pack ()
self.label = Label (self.window, text="Enter your Gender ").pack ()
self.g= StringVar ()
usertype = tk.StringVar()
self.combo = ttk.Combobox(self.window,state='readonly',values=
['male','Female','child']).pack()
self.gender = StringVar()
self.age = StringVar ()
self.label = Label (self.window, text="Enter your age ").pack ()
self.spin=Spinbox(self.window, from_=0, to=100).pack ()
self.buttontext = StringVar()
Button(self.window, textvariable=self.buttontext,
command=self.calculate).pack()
self.buttontext.set("Calculate")
self.bmi_num = StringVar()
Label(self.window, textvariable=self.bmi_num).pack()
self.bmi_text = StringVar()
Label(self.window, textvariable=self.bmi_text).pack()
self.window.mainloop()
def calculate(self):
weight=(self.kg.get())
weight=float(weight)
hight=(self.m.get())
hight=float(hight)
Gender=(self.g.get())
age=(self.age.get())
bmi=float((weight)/float(hight**2))
self.bmi_num.set("Your BMI is %.2f" % bmi)
if self.g.get()=="Man":
if bmi < 18.5:
self.bmi_text.set ("You are underweight")
if 18.5 <= bmi < 25:
self.bmi_text.set ("You are normal")
if 25 <= bmi < 30:
self.bmi_text.set ("You are overweight")
if 30 <= bmi > 30:
self.bmi_text.set ("You are obese")
App()
解决方案
A像(和其他)小部件一样ttk.Combobox
接受一个选项——你可以将它设置为一个命名的. 当用户从组合框的下拉菜单中选择某些内容时,它的值将自动设置。textvariable
Entry
StringVar
gender
判断用户是否做出选择的一种简单方法是手动为其分配一个不在菜单上的值。在下面的代码中,其初始值已设置"Select"
为不是GENDERS
.
from tkinter import *
import tkinter as tk
from tkinter import ttk
MALE, FEMALE, CHILD = 'Male', 'Female', 'Child'
GENDERS = MALE, FEMALE, CHILD
class App(Tk):
def __init__(self):
self.window = Tk()
self.window.title ("BMI")
Label(self.window, text="Enter your weight (kg)").pack()
self.kg = StringVar()
Entry(self.window, textvariable=self.kg).pack()
Label(self.window, text="Enter your height (m)").pack()
self.m = StringVar()
Entry(self.window, textvariable=self.m).pack()
Label(self.window, text="Enter your Gender").pack()
self.gender = StringVar(value="Select")
ttk.Combobox(self.window, state='readonly', values=GENDERS,
textvariable=self.gender).pack()
self.age = StringVar()
Label(self.window, text="Enter your age ").pack()
Spinbox(self.window, from_=0, to=100).pack()
self.buttontext = StringVar()
Button(self.window, textvariable=self.buttontext, command=self.calculate).pack()
self.buttontext.set("Calculate")
self.bmi_num = StringVar()
Label(self.window, textvariable=self.bmi_num).pack()
self.bmi_text = StringVar()
Label(self.window, textvariable=self.bmi_text).pack()
self.window.mainloop()
def calculate(self):
weight = float(self.kg.get())
height = float(self.m.get())
gender = self.gender.get()
age = self.age.get()
bmi = weight / (height**2)
self.bmi_num.set("Your BMI is %.2f" % bmi)
if self.gender.get() == MALE:
if bmi < 18.5:
self.bmi_text.set("You are underweight")
elif 18.5 <= bmi < 25:
self.bmi_text.set("You are normal")
elif 25 <= bmi < 30:
self.bmi_text.set("You are overweight")
else: # bmi > 30
self.bmi_text.set("You are obese")
if self.gender.get() == FEMALE:
...
# etc
App()
推荐阅读
- angular - 如何在 Angular 6 中与两个不同的延迟加载模块共享单例服务,而不在 AppModule 提供程序中提供它?
- pyqt5 - 将使用 PyQt5 的 Python 应用程序转换为 WebAssembly
- php - 表单请求验证不起作用。它只是在邮递员中加载主页
- javascript - 如何在 reactjs 中添加路由器链接
- java - 有没有办法根据不同的调用者为一个 hystrix 命令设置不同的配置?
- android - 具有 2 列和固定图像高度的 StaggeredGridLayout 管理器
- python - 如何正确设置 cron?
- android - Andriod 10 如何检查文件是否存在
- python - 如何从 pandas 中的 m8[ns] 对象中获取小时数?
- javascript - 自动完成编辑器(REACT,DRAFT-JS)