Python 如何将用户输入添加到列表中,并将该列表相加?
我正在运行一个跟踪用户费用的程序。我已经完成了大部分,但需要最关键的部分。当我运行该程序时,我得到一条错误消息:a1未定义。以下是我所拥有的:Python 如何将用户输入添加到列表中,并将该列表相加?,python,python-3.x,list,Python,Python 3.x,List,我正在运行一个跟踪用户费用的程序。我已经完成了大部分,但需要最关键的部分。当我运行该程序时,我得到一条错误消息:a1未定义。以下是我所拥有的: class Expense(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) home = Label(self, text = "Home: ") home.g
class Expense(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
home = Label(self, text = "Home: ")
home.grid(row = 3, column = 0)
util = Label(self, text = "Utilities: ")
util.grid(row = 4, column = 0)
health = Label(self, text = "Health/Medical: ")
health.grid(row = 5, column = 0)
food = Label(self, text = "Food: ")
food.grid(row = 6, column = 0)
transport = Label(self, text = "Transportation: ")
transport.grid(row = 7, column = 0)
a1 = Entry(self).grid(row = 3, column = 1)
a2 = Entry(self).grid(row = 4, column = 1)
a3 = Entry(self).grid(row = 5, column = 1)
a4 = Entry(self).grid(row = 6, column = 1)
a5 = Entry(self).grid(row = 7, column = 1)
submit = Button(self, text = "Submit", command = self.AddExpenses)
submit.grid(row = 8, column = 1)
#Here's where I run an issue.
def AddExpenses(self):
expenses = [a1, a2, a3, a4, a5]
total = 0
for i in list:
total = total + i
print("Your total spent", total)
如果您使用的是类,则需要使用实例变量,以便能够在整个类中使用该变量 您需要在所有这些变量之前使用
self
关键字。比如:
class Expense(tk.Frame):
def __init__(self, parent, controller):
self.a = 1
self.b = 2
这只是一个例子
您应该将代码更改为:
class Expense(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.home = Label(self, text = "Home: ")
self.home.grid(row = 3, column = 0)
self.util = Label(self, text = "Utilities: ")
self.util.grid(row = 4, column = 0)
self.health = Label(self, text = "Health/Medical: ")
self.health.grid(row = 5, column = 0)
self.food = Label(self, text = "Food: ")
self.food.grid(row = 6, column = 0)
self.transport = Label(self, text = "Transportation: ")
self.transport.grid(row = 7, column = 0)
self.a1 = Entry(self)
self.a2 = Entry(self)
self.a3 = Entry(self)
self.a4 = Entry(self)
self.a5 = Entry(self)
self.a1.grid(row = 3, column = 1)
self.a2.grid(row = 4, column = 1)
self.a3.grid(row = 5, column = 1)
self.a4.grid(row = 6, column = 1)
self.a5.grid(row = 7, column = 1)
self.submit = Button(self, text = "Submit", command = self.AddExpenses)
self.submit.grid(row = 8, column = 1)
#Here's where I run an issue.
def AddExpenses(self):
expenses = [
self.a1.get(),
self.a2.get(),
self.a3.get(),
self.a4.get(),
self.a5.get(),
]
total = 0
for i in list:
total = total + i
print("Your total spent", total)
如果您对使用python进行面向对象编程还不熟悉,您应该首先集中学习这一点,否则
Tkinter
会变得越来越难。对您的代码进行一些注释
- 您通常应该使用
而不是import-tkinter-as-tk
,以避免污染您的命名空间和名称之间存在潜在冲突from-tkinter-import*
- 在tkinter中定义小部件时,您只能在调用
或pack
之前将其分配给变量,因为这些函数返回grid
None
- 如果希望稍后在代码中重用某个小部件,只需将其分配给变量
- 您不能在新函数中使用变量
,因为该函数不知道这些变量(它们是在另一个函数中定义的-a1、a2、a3、a4、a5
)。要在别处检索它们,需要通过\uuuu init\uuu
对象将它们分配给类实例self
- 当您希望从
函数中的条目中获取值时,需要调用AddExpense
方法来检索它们get()
将tkinter作为tk导入
从tkinter导入消息框
课程费用(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
tk.Label(self,text=“Home:”).grid(行=3,列=0)
tk.Label(self,text=“Utilities:”).grid(行=4,列=0)
tk.Label(self,text=“Health/Medical:”).grid(行=5,列=0)
tk.Label(self,text=“Food:”).grid(行=6,列=0)
tk.Label(self,text=“Transportation:”).grid(行=7,列=0)
self.a1=传统条目(self)
self.a1.网格(行=3,列=1)
self.a2=传统条目(self)
self.a2.网格(行=4,列=1)
self.a3=传统条目(self)
self.a3.网格(行=5,列=1)
self.a4=传统条目(self)
self.a4.网格(行=6,列=1)
self.a5=传统条目(self)
self.a5.grid(行=7,列=1)
按钮(self,text=“Submit”,command=self.AddExpenses).grid(行=8,列=1)
def附加费用(自身):
费用=[self.a1.get()、self.a2.get()、self.a3.get()、self.a4.get()、self.a5.get()]
总计=总额(map(浮动、费用))
showinfo(“费用”,f“您的总花费为:{total}”)
打印(f“您的总花费为{total}”)
root=tk.tk()
exp=费用(根,无)
exp.pack()
root.mainloop()
嗯,是的,a1、a2、a3、a4、a5
是\uuuu init\uuuuu
的局部变量,所以在这个方法之外它们是不可访问的。OPs代码中还有几个问题没有在您的答案中解决,所以这当然不会work@oskros我只是回答了他的问题不能访问他自己的变量,剩下的应该很容易自己去弄清楚。如果你不知道grid
是一个返回None
的空函数,或者你需要调用get
从entry@oskros谢谢你指出,我没有太注意他的代码,我只解决了他的self.
问题,只是在每个变量声明中添加了self.
,而没有阅读代码。我会做一些修改,你能帮我指出他的错误吗。