Reputation: 11
I've been following a tutorial, and wrote this program. Could someone help me figure out why I'm getting the error message. "Application instance has no attribute 'text'"
from Tkinter import *
class Application(Frame):
""" A GUI application with three buttons."""
def __init__(self,master):
""" This initialized the Frame"""
Frame.__init__(self, master)
self.grid()
self.create_widgets()
self.buttonclicks = 0
def create_widgets(self):
"""Create a button that measures clicks."""
#create first button
self.button1 = Button(self, text = "Total Clicks: 0")
self.button1.grid()
self.instruction = Label(self, text= "Enters the password")
self.instruction.grid(row=0, column=0, columnspan=2, sticky=W)
self.password = Entry(self)
self.password.grid(row=1,column=1, sticky=W)
self.button1["command"] = self.update_count
self.button1.grid(row=2,column=0,sticky=W)
self.submit_button = Button(self, text="Submit", command=self.reveal())
self.texts = Text(self, width=35, height=5,wrap=WORD)
self.texts.grid(row=4,column=1,columnspan=2,sticky=W)
def update_count(self):
"""Increase this click count and display the new total"""
self.buttonclicks += 1
self.button1["text"] = "Total Clicks: " + str(self.buttonclicks)
def reveal(self):
"""Reveal the password"""
content = self.password.get()
messsage=""
if content == "password":
message = "You have access to the data."
else:
message = "Access denied."
self.texts.insert(0.0,message)
root = Tk()
root.title("GUI test")
root.geometry("250x185")
app = Application(root)
root.mainloop()
The thing is I already have a textfield defined as 'texts', and if it can get password from the attributes, i see no reason it would not get the texts.
Edit: was asked for the error:
Traceback (most recent call last):
File "clickcounter.py", line 58, in <module>
app = Application(root)
File "clickcounter.py", line 10, in __init__
self.create_widgets()
File "clickcounter.py", line 28, in create_widgets
self.submit_button = Button(self, text="Submit", command=self.reveal())
File "clickcounter.py", line 49, in reveal
self.texts.insert(0.0,message)
AttributeError: Application instance has no attribute 'texts'
Upvotes: 0
Views: 182
Reputation: 1375
Change line:
self.submit_button = Button(self, text="Submit", command=self.reveal())
to
self.submit_button = Button(self, text="Submit", command=self.reveal)
When you are passing it self.reveal()
it is calling self.reveal()
at that point, before self.texts
is defined.
You want to pass it the function to call not the result of the function called.
Upvotes: 1