<p>您应该将<code>self</code>属性与在本地范围外使用的变量一起使用。试试这个:</p>
<pre><code>from tkinter import *
from tkinter import ttk
myApp = Tk()
myApp.title("APP")
myApp.geometry("1000x650")
frame1=LabelFrame(myApp,text=" Activities ")
frame1.grid(row=0,column=0,padx=5)
i=Label(frame1, text=" i ")
i.grid(row=0,column=1)
ProjectName=Label(frame1, text=" Project name ")
ProjectName.grid(row=0,column=2)
SizeLabel=Label(frame1, text="Size [m2]")
SizeLabel.grid(row=0,column=3)
TotalCostLabel=Label(frame1, text="Total Cost")
TotalCostLabel.grid(row=0,column=4)
CostSizeLabel=Label(frame1, text="Cost/m2")
CostSizeLabel.grid(row=0,column=5)
newrow=1
class AddNewTask(object):
rowlist=[]
def update_row_values(self):
for i,entry in enumerate(self.rowlist):
entry.delete(0, 'end')
entry.insert(0,i+1)
def addTask(self):
def delete():
try:
sum = int(answerE.get())
entry_value = int(prodEntry.get())
new_sum = sum - entry_value
answerE.delete(0, 'end')
answerE.insert(0, sum)
except ValueError:
pass
bdelete.destroy()
iEntry.destroy()
ProjectEntry.destroy()
self.SizeEntry.destroy()
self.CostEntry.destroy()
self.CostSizeEntry.destroy()
self.rowlist.remove(iEntry)
self.update_row_values()
self.entrylist.remove(CostSizeEntry)
global newrow
newrow=newrow+1
bdelete=Button(frame1,text="-",command=delete)
bdelete.grid(row=newrow,column=0,sticky="E",padx=4)
iEntry=Entry(frame1,width=3)
self.rowlist.append(iEntry)
iEntry.grid(row=newrow,column=1,padx=1)
n = len(self.rowlist)
iEntry.insert(0,n)
ProjectEntry=Entry(frame1,width=75)
ProjectEntry.grid(row=newrow,column=2,padx=1)
self.SizeEntry=Entry(frame1,width=10)
self.SizeEntry.grid(row=newrow,column=3,padx=1)
self.CostEntry=Entry(frame1,width=10)
self.CostEntry.grid(row=newrow,column=4,padx=1)
self.CostSizeEntry=Entry(frame1,width=10)
self.CostSizeEntry.grid(row=newrow,column=5,padx=1)
self.entrylist.append(self.CostSizeEntry)
def __init__(self):
buttonadd=Button(frame1,text="Add Task",command=self.addTask)
buttonadd.grid(row=0,column=0,padx=3,pady=5)
self.entrylist = []
self.sumButton = Button(frame1, text="Sum Values", command=self.sumValues)
self.sumButton.grid(row=0, column=7)
def sumValues(self):
try:
CostSize=float(self.CostEntry.get())/float(self.SizeEntry.get())
self.CostSizeEntry.insert(0,CostSize)
except ValueError:
pass
sum = 0
for entry in AddNewTask.entrylist:
try:
sum += float(entry.get())
except ValueError:
pass
answerE.delete(0, 'end')
answerE.insert(0, sum)
AddNewTask=AddNewTask()
frame2=LabelFrame(myApp,text=" Answer")
frame2.grid(row=0,column=1,padx=5,sticky="N")
answerL=Label(frame2, text="Answer: ")
answerL.grid(row=0,column=0)
answerE=Entry(frame2,width=10)
answerE.grid(row=0, column=1)
myApp.mainloop()
</code></pre>