【问题标题】:Tkinter - Simple program won't updateTkinter - 简单程序不会更新
【发布时间】:2012-10-29 01:24:39
【问题描述】:

我用 Tkinter 做了一个 BMI 计算器。 我已经成功编码了接受用户输入并计算其 BMI 的位。 我遇到的一个问题是它只在第一次点击时显示“你体重不足/正常/肥胖”。第一次单击后,此标签不再更新,但 BMI 标签会更新。

谁能告诉我如何解决这个问题?

from Tkinter import *
import tkMessageBox

class App(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("Question 7")
        self.label = Label (self.root, text= "Enter your weight in pounds.")
        self.label.pack()  
        self.entrytext = StringVar()
        Entry(self.root, textvariable=self.entrytext).pack()

        self.label = Label (self.root, text= "Enter your height in inches.")
        self.label.pack()  
        self.entrytext2 = StringVar()
        Entry(self.root, textvariable=self.entrytext2).pack()

        self.buttontext = StringVar()
        self.buttontext.set("Calculate")
        Button(self.root, textvariable=self.buttontext, command=self.clicked1).pack()

        self.label = Label (self.root, text="")
        self.label.pack()

        self.dec = Label (self.root, text="")
        self.dec.pack()

        self.root.mainloop()


    def clicked1(self):
        w = float(self.entrytext.get())
        h = float(self.entrytext2.get())
        bmi = float((w/(h**2))*703)
        bmi = ("Your BMI is %.2f" %bmi)
        self.label.configure(text=bmi)
        if bmi < 18.5:
            self.dec.configure(text="You are underweight")
        if 18.5 <= bmi < 25:
            self.dec.configure(text="You are normal")
        if 25 <= bmi < 30:
            self.dec.configure(text="You are overweight")
        if 30<= bmi > 30:
            self.dec.configure(text="You are obese")



App()

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    我会先说我的 Tkinter 经验是......有限 :) 但是下面的内容似乎可以满足您的需求。主要的调整在于定义标签本身。

    from Tkinter import *
    import tkMessageBox
    
    class App(object):
        def __init__(self):
            self.root = Tk()
            self.root.wm_title("Question 7")
    
            self.label = Label(self.root, text="Enter your weight in pounds.").pack()
            self.entrytext = StringVar()
            Entry(self.root, textvariable=self.entrytext).pack()
    
            self.label = Label(self.root, text="Enter your height in inches.").pack()
            self.entrytext2 = StringVar()
            Entry(self.root, textvariable=self.entrytext2).pack()
    
            self.buttontext = StringVar()
            Button(self.root, textvariable=self.buttontext, command=self.clicked1).pack()
            self.buttontext.set("Calculate")
    
            # Here we set bmi_num (the actual number) as a StringVar
            # and then pack a label with the textvariable property = bmi_num.
            # This ensure that whenever we change that variable, the label updates
            self.bmi_num = StringVar()
            Label(self.root, textvariable=self.bmi_num).pack()
    
            # Same thing here
            self.bmi_text = StringVar()
            Label(self.root, textvariable=self.bmi_text).pack()
    
            self.root.mainloop()
    
        def clicked1(self):
            w = float(self.entrytext.get())
            h = float(self.entrytext2.get())
            bmi = float((w/(h**2))*703)
            # Now we just use the below syntax to update the label
            self.bmi_num.set("Your BMI is %.2f" % bmi)
            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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多