Reputation: 3
So I am very new to programming and I'm trying to puzzle out my first tkinter program. It utilizes a formula from thebioneer.com to calculate a person's "Power Level" (think DBZ). However whenever I run it I get "AttributeError: '_tkinter.tkapp' object has no attribute 'entry3' and I can't figure out whats wrong.
import tkinter
class powerapp_tk(tkinter.Tk):
def __init__(self,parent):
tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
label = tkinter.Label(self, text="Enter Back Squat 1 Rep Max")
label.grid(column=0,row=0,columnspan=2,sticky='EW')
entry1 = tkinter.Entry(self)
entry1.grid(column=0,row=1,sticky='EW')
label2 = tkinter.Label(self, text="Enter Bench Press 1 Rep Max")
label2.grid(column=0,row=2,columnspan=2, sticky='EW')
entry2 = tkinter.Entry(self)
entry2.grid(column=0,row=3,sticky='EW')
label3 = tkinter.Label(self, text="Enter Max KM Covered in 12 min")
label3.grid(column=0,row=4,columnspan=2,sticky='EW')
entry3 = tkinter.Entry(self)
entry3.grid(column=0,row=5,sticky='EW')
label4 = tkinter.Label(self, text="Enter Max Pull Ups With Perfect Form")
label4.grid(column=0,row=6,columnspan=2,sticky='EW')
entry4 = tkinter.Entry(self)
entry4.grid(column=0,row=7,sticky='EW')
label5 = tkinter.Label(self, text="Enter Standing Vertical Jump in CM")
label5.grid(column=0,row=8,columnspan=2,sticky='EW')
entry5 = tkinter.Entry(self)
entry5.grid(column=0,row=9,sticky='EW')
label6 = tkinter.Label(self, text="Enter Max One Legged Tennis Ball Catch")
label6.grid(column=0,row=10,columnspan=2,sticky='EW')
entry6 = tkinter.Entry(self)
entry6.grid(column=0,row=11,sticky='EW')
label7 = tkinter.Label(self, text="Enter IQ Score")
label7.grid(column=0,row=12,columnspan=2,sticky='EW')
entry7 = tkinter.Entry(self)
entry7.grid(column=0,row=13,sticky='EW')
button = tkinter.Button(self, text=u"Calculate", command=self.calcpower)
button.grid(column=0,row=14)
self.grid_columnconfigure(0,weight=2)
self.minsize(width=400, height=400)
self.resizable(True, False)
self.update()
self.geometry(self.geometry())
def calcpower(self):
h = entry3.get() * 100
i = entry4.get() * 5
j = entry5.get() * 15
k = entry6.get() * 8
l = entry7.get() * 2.5
powerlevel = int(a)+int(b)+int(h)+int(i)+int(j)+int(k)+int(l)
print('Your power level is: ' + str(powerlevel))
if __name__=="__main__":
app = powerapp_tk(None)
app.title('Power App')
app.mainloop()
Upvotes: 0
Views: 699
Reputation: 369
I had to move a few things around and your code has some other issues, but this will get you a little further. Basically the program didnt realize your entry3 was applied to the different functions. Other option would be to declare it as a global but self.entry# is a better solution
import tkinter
class powerapp_tk(tkinter.Tk):
def __init__(self,parent):
tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def calcpower(self):
h = self.entry3.get() * 100
i = self.entry4.get() * 5
j = self.entry5.get() * 15
k = self.entry6.get() * 8
l = float(self.entry7.get()) * 2.5
powerlevel = int(h) + int(i) + int(j) + int(k) + int(l)
print('Your power level is: ' + str(powerlevel))
def initialize(self):
self.grid()
label = tkinter.Label(self, text="Enter Back Squat 1 Rep Max")
label.grid(column=0,row=0,columnspan=2,sticky='EW')
entry1 = tkinter.Entry(self)
entry1.grid(column=0,row=1,sticky='EW')
label2 = tkinter.Label(self, text="Enter Bench Press 1 Rep Max")
label2.grid(column=0,row=2,columnspan=2, sticky='EW')
entry2 = tkinter.Entry(self)
entry2.grid(column=0,row=3,sticky='EW')
label3 = tkinter.Label(self, text="Enter Max KM Covered in 12 min")
label3.grid(column=0,row=4,columnspan=2,sticky='EW')
self.entry3 = tkinter.Entry(self)
self.entry3.grid(column=0,row=5,sticky='EW')
label4 = tkinter.Label(self, text="Enter Max Pull Ups With Perfect Form")
label4.grid(column=0,row=6,columnspan=2,sticky='EW')
self.entry4 = tkinter.Entry(self)
self.entry4.grid(column=0,row=7,sticky='EW')
label5 = tkinter.Label(self, text="Enter Standing Vertical Jump in CM")
label5.grid(column=0,row=8,columnspan=2,sticky='EW')
self.entry5 = tkinter.Entry(self)
self.entry5.grid(column=0,row=9,sticky='EW')
label6 = tkinter.Label(self, text="Enter Max One Legged Tennis Ball Catch")
label6.grid(column=0,row=10,columnspan=2,sticky='EW')
self.entry6 = tkinter.Entry(self)
self.entry6.grid(column=0,row=11,sticky='EW')
label7 = tkinter.Label(self, text="Enter IQ Score")
label7.grid(column=0,row=12,columnspan=2,sticky='EW')
self.entry7 = tkinter.Entry(self)
self.entry7.grid(column=0,row=13,sticky='EW')
button = tkinter.Button(self, text=u"Calculate", command=self.calcpower)
button.grid(column=0,row=14)
self.grid_columnconfigure(0,weight=2)
self.minsize(width=400, height=400)
self.resizable(True, False)
self.update()
self.geometry(self.geometry())
if __name__=="__main__":
app = powerapp_tk(None)
app.title('Power App')
app.mainloop()
Upvotes: 1
Reputation: 2418
Please add self prefix to all your entry fields everywhere. Instead of entry3, use self.entry3.
Upvotes: 0