python - 试图在 tkinter 中打印我的菜单 gui 的总成本。ERROR = 'int' 对象不可调用
问题描述
嗨,我在尝试将这个菜单聊天机器人变成 gui 时遇到了麻烦,我有一些代码不匹配,一旦在第 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)
如果有人可以解决这个问题,那将非常感谢。
解决方案
在内部Maccas_Submit()
,您self.Total_Maccas_num
已从IntVar
(initialized inside 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
推荐阅读
- angular - 无法使用 Visual Studio github 推送 Angular 项目中的更改
- r - 使用 selectinput 的饼图闪亮应用程序
- c++ - 通过引用传递后对象内部的值不会改变
- bash - 使用 cat 和 heredoc 将数据写入给定文件时权限被拒绝
- python - 文件上传请求取消时Django未捕获异常
- android - Android Studio 没有在我的手机上安装应用程序
- tsql - 在选择期间按字母顺序重新排序字符串
- sql - 如何在 Postgres 的分区表中搜索?
- raspbian - 使用 Raspian Buster 编写文件
- node.js - 无法构建角度通用服务器,请帮助我