试图在 tkinter 中打印我的菜单 gui 的总成本。错误 = 'int' 对象不可调用

trying to print cost total of my menu gui in tkinter. ERROR = 'int' object is not callable

嗨,我在尝试将这个菜单聊天机器人之类的东西变成图形用户界面时遇到了麻烦,我有一些代码不匹配,我可以在点击 'Finish Order' 后打印所有项目的总成本108

所有代码:

    from tkinter import *

cost = 0

class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master, bg='#DA291C')               
        self.master = master
        self.init_window()
    def init_window(self):
        self.master.title("Maccas Menu")
        self.pack(fill=BOTH, expand=1)
        Label(self, bg='#DA291C', text=" Name: ",fg='#FFC72C').grid(row=0)
        Label(self, bg='#DA291C', text="Address: ",fg='#FFC72C').grid(row=1)
        Label(self, bg='#DA291C', text="Phone: ",fg='#FFC72C').grid(row=2)

        #Customer Details
        self.Name = Entry(self)
        self.Name.grid(row=0, column=1)
        self.Address = Entry(self, state='disabled')
        self.Address.grid(row=1, column=1)
        self.Phone_Number = Entry(self, state='disabled')
        self.Phone_Number.grid(row=2, column=1)

        self.delivery = BooleanVar()
        Checkbutton(self, text="Delivery",fg='#27251F', bg='#DA291C', variable=self.delivery, command=self.check).grid(row=1, column=2)
        Button(self, text='Show',fg='#27251F', bg='#DA291C', command=self.show_entry_fields).grid(row=0, column=2, sticky=W, pady=4, padx=5)

        #Maccas Selection
        Label(self, text = "Maccas", font='bold', fg='#27251F', bg='#DA291C').grid(columnspan=2, pady=(20,5))

        #Maccas Numbers
        self.BigMac_num = IntVar()
        self.Nuggets_num = IntVar()
        self.AngusBurger_num = IntVar()
        self.Wraps_num = IntVar()
        self.SoftServe_num = IntVar()
        self.Fillet_o_Fish_num = IntVar()
        self.HappyMeal_num = IntVar()
        self.Salad_num = IntVar()
        self.Sprite_num_num = IntVar()
        self.Frozen_Coke_num = IntVar()
        self.Apple_Pie_num = IntVar()
        self.Apple_Slices_num = IntVar()

        #Spinbox Labels
        Label(self, text = "BigMac",fg='#FFC72C', bg='#DA291C').grid(row=4)
        Label(self, text = "Nuggets",fg='#FFC72C', bg='#DA291C').grid(row=5)
        Label(self, text = "AngusBurger",fg='#FFC72C', bg='#DA291C').grid(row=6)
        Label(self, text = "Wraps",fg='#FFC72C', bg='#DA291C').grid(row=7)
        Label(self, text = "SoftServe",fg='#FFC72C', bg='#DA291C').grid(row=8)
        Label(self, text = "Fillet'o'Fish",fg='#FFC72C', bg='#DA291C').grid(row=9)
        Label(self, text = "HappyMeal",fg='#FFC72C', bg='#DA291C').grid(row=10)
        Label(self, text = "Salad",fg='#FFC72C', bg='#DA291C').grid(row=11)
        Label(self, text = "Sprite",fg='#FFC72C', bg='#DA291C').grid(row=12)
        Label(self, text = "Frozen Coke",fg='#FFC72C', bg='#DA291C').grid(row=13)
        Label(self, text = "Apple Pie",fg='#FFC72C', bg='#DA291C').grid(row=14)
        Label(self, text = "Apple Slices",fg='#FFC72C', bg='#DA291C').grid(row=15)

        #Spinboxes
        self.BigMac_num = Spinbox(self, from_=0, to=5)
        self.Nuggets_num = Spinbox(self, from_=0, to=5)
        self.AngusBurger_num = Spinbox(self, from_=0, to=5)
        self.Wraps_num = Spinbox(self, from_=0, to=5)
        self.SoftServe_num = Spinbox(self, from_=0, to=5)
        self.Fillet_o_Fish_num = Spinbox(self, from_=0, to=5)
        self.HappyMeal_num = Spinbox(self, from_=0, to=5)
        self.Salad_num = Spinbox(self, from_=0, to=5)
        self.Sprite_num = Spinbox(self, from_=0, to=5)
        self.Frozen_Coke_num = Spinbox(self, from_=0, to=5)
        self.Apple_Pie_num = Spinbox(self, from_=0, to=5)
        self.Apple_Slices_num = Spinbox(self, from_=0, to=5)

        #Spinbox Positioning
        self.BigMac_num.grid(row=4, column=1)
        self.Nuggets_num.grid(row=5, column=1)
        self.AngusBurger_num.grid(row=6, column=1)
        self.Wraps_num.grid(row=7, column=1)
        self.SoftServe_num.grid(row=8, column=1)
        self.Fillet_o_Fish_num.grid(row=9, column=1)
        self.HappyMeal_num.grid(row=10, column=1)
        self.Salad_num.grid(row=11, column=1)
        self.Sprite_num.grid(row=12, column=1)
        self.Frozen_Coke_num.grid(row=13, column=1)
        self.Apple_Pie_num.grid(row=14, column=1)
        self.Apple_Slices_num.grid(row=15, column=1)

        self.Total_Maccas_num = IntVar()

        Button(self, text='Finish Order',fg='#27251F',bg='#DA291C', command=self.Maccas_Submit).grid(row=16, column=0, sticky=W, pady=4, padx=5)
        self.TooMany = Label(self, text = "Less than 5 items please.")
        self.TooMany.grid_remove()
         
    def Maccas_Submit(self):
        self.Total_Maccas_num = int(self.BigMac_num.get()) + int(self.Nuggets_num.get()) + int(self.AngusBurger_num.get()) + int(self.Wraps_num.get()) + int(self.SoftServe_num.get()) + int(self.Fillet_o_Fish_num.get()) + int(self.HappyMeal_num.get()) + int(self.Salad_num.get()) + int(self.Sprite_num.get()) + int(self.Frozen_Coke_num.get()) + int(self.Apple_Pie_num.get()) + int(self.Apple_Slices_num.get())
        if int(self.Total_Maccas_num) > 5:
            self.TooMany.grid(row=20, column=1)
        else:
            self.Total_Maccas_num(row=20, column=1)
            
             
            
    def check(self):    
        if self.delivery.get() == True:
            self.Address.configure(state='normal')
            self.Phone_Number.configure(state='normal')
        else:
            self.Address.configure(state='disabled')
            self.Phone_Number.configure(state='disabled')
    def show_entry_fields(self):
        global cost
        print("\n Name: {}\n Address: {}\n Phone Number: {}" .format(self.Name.get(), self.Address.get(), self.Phone_Number.get()))
        print(self.delivery.get())
        if self.delivery.get() == True:
            cost += 3
        print(cost)


root = Tk()

root.geometry("400x600")

app = Window(root)

root.mainloop()

这是我感到困惑并希望得到帮助的部分。

        def Maccas_Submit(self):
        self.Total_Maccas_num = int(self.BigMac_num.get()) + int(self.Nuggets_num.get()) + int(self.AngusBurger_num.get()) + int(self.Wraps_num.get()) + int(self.SoftServe_num.get()) + int(self.Fillet_o_Fish_num.get()) + int(self.HappyMeal_num.get()) + int(self.Salad_num.get()) + int(self.Sprite_num.get()) + int(self.Frozen_Coke_num.get()) + int(self.Apple_Pie_num.get()) + int(self.Apple_Slices_num.get())
        if int(self.Total_Maccas_num) > 5:
            self.TooMany.grid(row=20, column=1)
        else:
            self.Total_Maccas_num(row=20, column=1)

如果有人能解决这个问题,那将非常有帮助。

我真的无法解释,所以这里有一个例子:

#This is my own Python Grade Percentage Calculator

import tkinter

root = tkinter.Tk()
root.title("Calculator")

root.configure(background="red")


expression =""

def add(value):
    global expression
    expression += value
    label_result.config(text=expression)

def clear():
    global expression
    expression = ""
    label_result.config(text=expression)

def calculate():
    global expression
    result = ""
    if expression != "":
        try:
            result = format(eval(expression), ".2f")
        except:
            result = "Invalid Entry"
            expression = ""
    label_result.config(text=result)

# Create GUI
label_result = tkinter.Label(root, height=3, text="JOEL'S \n GRADE CALCULATOR \n",fg="#FFFFFF", bg="red", font="Calibri 20 bold")
label_result.grid(row=0, column=0, columnspan=3)

label_result = tkinter.Label(root, height=2, text="",fg="#FFFFFF", bg="red", font="verdana 15 bold")
label_result.grid(row=1, column=0, columnspan=3)

button_1 = tkinter.Button(root, text="1", height=4, width=20, command=lambda: add("1"))
button_1.grid(row=2, column=0)

button_2 = tkinter.Button(root, text="2", height=4, width=20, command=lambda: add("2"))
button_2.grid(row=2, column=1)

button_3 = tkinter.Button(root, text="3", height=4, width=20, command=lambda: add("3"))
button_3.grid(row=2, column=2)

button_4 = tkinter.Button(root, text="4", height=4, width=20, command=lambda: add("4"))
button_4.grid(row=3, column=0)

button_5 = tkinter.Button(root, text="5", height=4, width=20, command=lambda: add("5"))
button_5.grid(row=3, column=1)

button_6 = tkinter.Button(root, text="6", height=4, width=20, command=lambda: add("6"))
button_6.grid(row=3, column=2)

button_7 = tkinter.Button(root, text="7", height=4, width=20, command=lambda: add("7"))
button_7.grid(row=4, column=0)

button_8 = tkinter.Button(root, text="8", height=4, width=20, command=lambda: add("8"))
button_8.grid(row=4, column=1)

button_9 = tkinter.Button(root, text="9", height=4, width=20, command=lambda: add("9"))
button_9.grid(row=4, column=2)

button_clear = tkinter.Button(root, text="CLEAR", height=4, width=20, command=lambda: clear())
button_clear.grid(row=5, column=0)

button_0 = tkinter.Button(root, text="0", height=4, width=20, command=lambda: add("0"))
button_0.grid(row=5, column=1)

button_dot = tkinter.Button(root, text=".", height=4, width=20, command=lambda: add("."))
button_dot.grid(row=5, column=2)

button_equals = tkinter.Button(root, fg="#000000", text=" / ", width=33, bg="red", font="Calibri 12 bold", command=lambda: add ("/"))
button_equals.grid(row=6, column=0, columnspan=3)

button_equals = tkinter.Button(root, fg="#000000", text="CONVERT TO PERCENTAGE", width=33,bg="red", font="Calibri 12 bold", command=lambda: add ("*100"))
button_equals.grid(row=7, column=0, columnspan=3)

button_equals = tkinter.Button(root, fg="#000000", text=" = ",bg="red", width=33, font="Calibri 12 bold",  command=lambda: calculate())
button_equals.grid(row=8, column=0, columnspan=3)

root.mainloop()

Maccas_Submit() 内,您已将 self.Total_Maccas_numIntVar(在 init_window() 内初始化)更改为 int:

    def Maccas_Submit(self):
        # below line changed self.Total_Maccas_num to 'int'
        self.Total_Maccas_num = int(self.BigMac_num.get()) + int(self.Nuggets_num.get()) + int(self.AngusBurger_num.get()) + int(self.Wraps_num.get()) + int(self.SoftServe_num.get()) + int(self.Fillet_o_Fish_num.get()) + int(self.HappyMeal_num.get()) + int(self.Salad_num.get()) + int(self.Sprite_num.get()) + int(self.Frozen_Coke_num.get()) + int(self.Apple_Pie_num.get()) + int(self.Apple_Slices_num.get())
        if int(self.Total_Maccas_num) > 5:
            self.TooMany.grid(row=20, column=1)
        else:
            # below line tries to use 'int' as a function which causes the exception
            self.Total_Maccas_num(row=20, column=1)

根据您的代码,我建议进行以下更改:

class Window(Frame):
    ...
    def init_window(self):
        ...
        self.Total_Maccas_num = IntVar()

        Button(self, text='Finish Order',fg='#27251F',bg='#DA291C', command=self.Maccas_Submit).grid(row=16, column=0, sticky=W, pady=4, padx=5)
        self.TooMany = Label(self, text = "Less than 5 items please.")
        #self.TooMany.grid_remove() # not necessary
        self.total_label = Label(self, textvariable=self.Total_Maccas_num)  # added a label for the total

    def Maccas_Submit(self):
        total = int(self.BigMac_num.get()) + int(self.Nuggets_num.get()) + int(self.AngusBurger_num.get()) + int(self.Wraps_num.get()) + int(self.SoftServe_num.get()) + int(self.Fillet_o_Fish_num.get()) + int(self.HappyMeal_num.get()) + int(self.Salad_num.get()) + int(self.Sprite_num.get()) + int(self.Frozen_Coke_num.get()) + int(self.Apple_Pie_num.get()) + int(self.Apple_Slices_num.get())
        if total > 5:
            self.total_label.grid_forget() # hide the total_label
            self.TooMany.grid(row=20, column=1) # show the warning
        else:
            self.TooMany.grid_forget() # hide the warning
            self.Total_Maccas_num.set(total) # update total_label
            self.total_label.grid(row=20, column=1) # show total_label