【问题标题】:How to make if statement with combobox (Tkinter)如何使用组合框(Tkinter)制作 if 语句
【发布时间】:2021-03-09 09:45:50
【问题描述】:

带有组合框的If语句

我正在制作使用 GUI 计算 BMI 的应用程序,并且我为选择性别(男性、女性、儿童)制作了组合框,并且您知道 BMI 结果(肥胖或体重过轻......)在男性和女性之间会有所不同, 和 Child 所以我想要当用户选择 Gender ...如果选择的 Gender 是 male 将打印正常 (18-25) 并且当用户选择 Gender 是 child normal is (14-18) etc... 请帮助我这样做...我的代码是用 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()

【问题讨论】:

  • 首先,将self.combopack()移动到不同的行。其次,使用:if self.combo.get() == 'Man':.
  • 30 &lt;= bmi &gt; 30 应该做什么?我想你想写30 &lt;= bmi
  • 能否请您解释一下或者编辑后写完整的代码
  • 你为什么在你的问题中随机大写一些单词?它使阅读变得困难。

标签: python if-statement user-interface tkinter combobox


【解决方案1】:

ttk.Combobox 接受 textvariable 选项,就像 Entry(和其他)小部件一样 - 您可以将其设置为名为 genderStringVar。当用户从组合框的下拉菜单中选择某些内容时,它的值将自动设置。

判断用户是否做出选择的简单方法是手动为其分配一个值,该值不是菜单上的内容。在下面的代码中,其初始值已设置为"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()

【讨论】:

  • 如果bmi if更改为elif
  • @acw1668:谢谢。
  • Adnan mohammed:通过@acw1668 建议的修复,我的回答能解决您的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 2020-01-29
  • 2012-08-01
  • 1970-01-01
相关资源
最近更新 更多