提示计算器 - 语法错误

时间:2014-08-14 03:59:22

标签: python syntax-error calculator

大家好我是相对编程的新手,但我尝试使用GUI界面来构建小费计算器。什么都不大,没什么比较难的,但我遇到了错误。由于某种原因,我的Python不会显示错误。它只是转到shell,SyntaxError说:然后退回到脚本。它曾经显示错误,但我不知道什么是错的...反正如果你们可以帮助我排除故障这个id非常感谢..

`

# A tip calculator
# A tip calculator using a GUI interface
# Austin Howard Aug - 13 - 2014

from tkinter import *
#Creating buttons.
class Calculator(Frame):
    """ A GUI tip calculator."""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.creating_buttons()
    def creating_buttons(self):
        """This list includes Entry fields, which the user will use to define
several objects such as Bill, and how many people are paying on that bill."""
        #Create an entry field button for how much the bill total is.
        #Create a label 
        bill_lbl = Label(self,
                         text = "Bill: ")
        bill_lbl.grid(row = 1,
                      column = 0,
                      columnspan = 1,
                      sticky = W)
        #Create an Entry field.
        bill_ent = Entry(self)
        bill_ent.grid(row = 1,
                      column = 1,
                      sticky = W)
        #Create a Button for how many people will be paying on the bill
        #Create label
        people_paying_lbl = Label(self,
                                  text = "How many people are paying on this bill?: ")
        people_paying_lbl.grid(row = 2,
                               column = 0,
                               columnspan = 1,
                               sticky = W)
        #Create an entry field
        people_paying_ent = Entry(self)
        people_paying_ent.grid(row = 2,
                               column = 1,
                               sticky = W)
        #Create a text box to display the totals in
        bill_total_txt = Text(self,
                              width = 40,
                              height = 40,
                              wrap = WORD)
        bill_total_txt.grid(row = 3,
                            column = 0,
                            columnspan = 2,
                            sticky = W)
        #Create a Submit button
        submit = Button(self,
                        text = "Submit",
                        command = self.total)
        submit.grid(row = 4,
                    column = 0,
                    sticky = W)

    def total(self):
        """ Takes the values from Bill, and # of people to get the amount that will be
displayed in the text box."""
        TAX = .15
        bill = float(bill_ent)
        people = people_paying_ent
        Total = ("The tip is: $", TAX * bill, "\nThe total for the bill is: $",
                 TAX * bill + bill,
                 "divided among the people paying equally is: $",
                 TAX * bill + bill / people "per, person.")
        bill_total_txt.delete(0.0, END)
        bill_total_txt.insert(0.0, Total)





#Starting the Program
root = Tk()
root.title("Tip Calculator")
app = Calculator(root)
root.mainloop()
`

2 个答案:

答案 0 :(得分:1)

第68行有错误:

替换

TAX * bill + bill / people "per, person.")

TAX * bill + bill / people, "per, person.")

还要确保在root.mainloop()

之后删除反引号

答案 1 :(得分:0)

从条目框中获取输入的方式是错误的。您应该将StringVariable绑定到它们,以便稍后能够获取用户键入的内容:

self.billvar = StringVar()
bill_ent = Entry(self, textvariable = self.billvar)

和人数一样的盒子。 然后在total函数中,您可以使用self.billvar.get()读取值。您可以使用float(self.billvar.get())将其转换为浮点数。但是,如果失败(用户输入的内容无法转换为浮点数),您可能想告诉他们而不是让程序抛出错误。所以你应该使用类似的东西:

try:
    convert input
except:
    what to do if it fails, tell the user?
else:
    what to do if it did not fail, so do the calculations

你的程序就变成了这样的东西(我用##做了评论):

# A tip calculator
# A tip calculator using a GUI interface
# Austin Howard Aug - 13 - 2014

from tkinter import *
#Creating buttons.
class Calculator(Frame):
    """ A GUI tip calculator."""
    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.creating_buttons()

    def creating_buttons(self):
        """This list includes Entry fields, which the user will use to define
        several objects such as Bill, and how many people are paying on that bill."""
        #Create an entry field button for how much the bill total is.
        #Create a label 
        bill_lbl = Label(self,
                         text = "Bill: ")
        bill_lbl.grid(row = 1,
                      column = 0,
                      columnspan = 1,
                      sticky = W)
        #Create an Entry field.
        ## Create a StringVar and link it to the entry box
        self.billvar = StringVar()
        bill_ent = Entry(self, textvariable = self.billvar)
        bill_ent.grid(row = 1,
                      column = 1,
                      sticky = W)
        #Create a Button for how many people will be paying on the bill
        #Create label
        people_paying_lbl = Label(self,
                                  text = "How many people are paying on this bill?: ")
        people_paying_lbl.grid(row = 2,
                               column = 0,
                               columnspan = 1,
                               sticky = W)
        #Create an entry field
        ## Create a StringVar and link it to the entry box
        self.pplvar = StringVar()
        people_paying_ent = Entry(self, textvariable = self.pplvar)
        people_paying_ent.grid(row = 2,
                               column = 1,
                               sticky = W)
        #Create a text box to display the totals in
        ## This had to be self.bill_total_txt, to be able to put text in it from the total function
        self.bill_total_txt = Text(self,
                              height = 10,
                              width = 40,
                              wrap = WORD)
        self.bill_total_txt.grid(row = 3,
                            column = 0,
                            columnspan = 2,
                            sticky = W)
        #Create a Submit button
        submit = Button(self,
                        text = "Submit",
                        command = self.total)
        submit.grid(row = 4,
                    column = 0,
                    sticky = W)

    def total(self):
        """ Takes the values from Bill, and # of people to get the amount that will be
        displayed in the text box."""
        TAX = .15
        ## Try to convert the bill to a float and the number of people to an integer
        try:
            bill = float(self.billvar.get())
            people = int(self.pplvar.get())
        ## If something goes wrong tell the user the input is invalid
        except:
            self.bill_total_txt.delete(0.0, END)
            self.bill_total_txt.insert(0.0, 'Invalid input')
        ## If the conversion was possible, calculate the tip, the total amount and the amout per person and format them as a string with two decimals
        ## Then create the complete message as a list and join it togeather when writing it to the textbox
        else:
            tip = "%.2f" % (TAX * bill)
            tot = "%.2f" % (TAX * bill + bill)
            tot_pp = "%.2f" % ((TAX * bill + bill) / people)
            Total = ["The tip is: $", tip,
                     "\nThe total for the bill is: $",
                     tot,
                     " divided among the people paying equally is: $",
                     tot_pp,
                     " per person."]
            self.bill_total_txt.delete(0.0, END)
            self.bill_total_txt.insert(0.0, ''.join(Total))





#Starting the Program
root = Tk()
root.title("Tip Calculator")
app = Calculator(root)
root.mainloop()