Python Tkinter-使程序等待用户输入

Python Tkinter-使程序等待用户输入,python,tkinter,Python,Tkinter,我有一个程序,在用户给出身高和体重后,计算一个人的BMI 我使用variable.insert插入一个值,这样程序就不会有错误 有没有办法让程序“空”启动而不出错?基本上,我需要它在按下计算按钮之前不做任何事情 from Tkinter import * class App(Tk): def __init__(self): Tk.__init__(self) self.height() self.weigh() self.output() self

我有一个程序,在用户给出身高和体重后,计算一个人的BMI

我使用variable.insert插入一个值,这样程序就不会有错误

有没有办法让程序“空”启动而不出错?基本上,我需要它在按下计算按钮之前不做任何事情

from Tkinter import *

class App(Tk):
  def __init__(self):
    Tk.__init__(self)

    self.height()
    self.weigh()
    self.output()
    self.calculate()


  def height(self):

    Label(self, text = "Enter Height, feet").grid()

    self.feet = Entry(self)
    self.feet.grid(row = 0, column = 1)
    self.feet.insert(0, "1")



    Label(self, text = "Enter Height, inches").grid(row = 1, column = 0)

    self.inches = Entry(self)
    self.inches.grid(row = 1, column = 1)
    self.inches.insert(0, "1")


  def weigh(self):

    Label(self, text = "Enter Weight").grid(row =2, column = 0)

    self.weight = Entry(self)
    self.weight.grid(row = 2, column = 1)
    self.weight.insert(0, "1")


  def output(self):
    self.calcBMI = Button(self, text = "Calculate BMI")
    self.calcBMI.grid(row = 6, columnspan = 2)
    self.calcBMI["command"] = self.calculate


    Label(self, text = "Body Mass Index").grid(row = 4, column = 0)
    self.lblbmi = Label(self, bg = "#fff", anchor = "w", relief = "groove")
    self.lblbmi.grid(row = 4, column = 1, sticky = "we")



    Label(self, text = "Status").grid(row = 5, column = 0)
    self.lblstat = Label(self, bg = "#fff", anchor = "w", relief = "groove")
    self.lblstat.grid(row = 5, column = 1, sticky = "we")



  def calculate(self):

    ft = int(self.feet.get())
    inch = int(self.inches.get())
    ht = ft * 12 + inch
    wt = int(self.weight.get())

    bmi = (wt * 703) / (ht ** 2)

    self.lblbmi["text"] = "%.2f" % bmi

    if bmi > 30:
        self.lblstat["text"] = "Obese"
    elif bmi > 25:
        self.lblstat["text"] = "Overweight"
    elif bmi > 18.5:
        self.lblstat["text"] = "Normal"
    else:
        self.lblstat["text"] = "Underweight"



def main():
  app = App()
  app.mainloop()

if __name__ == "__main__":
  main()

您现在所做的是直接调用输出&也可以通过按下calculate按钮。你需要做的是只在按下按钮时调用它

从init中删除self.calculate

现在只需删除所有insert语句。你不再需要它们了

编辑: 正如Joe在评论中所建议的,您还可以禁用该按钮,直到填充所有字段。您可以通过将其状态设置为disabled来实现此目的,如下所示:

self.calcBMI.config(state='disabled')

为什么在init中调用calculate?如果您不这样做,并在填充字段之前禁用“计算”按钮,问题就会消失。第一种方法有效,正是我分配任务所需的方法,但仅供参考,仅此一行是否可以确保仅在填充所有字段时程序才会运行?不,这只是为了禁用按钮。为了确保所有字段都已填充,您必须像计算BMI那样填充字段并确保它们不为空。如果您觉得我的答案信息丰富且有用,请给出答案。这是告诉人们你已经找到答案的一种方式。但是,没有义务: