[Tutor] Problems passing a parameter in a GUI
James Reynolds
eire1130 at gmail.com
Tue Jan 18 23:02:25 CET 2011
You have other issues at play here, but to answer your question from below:
You are calling the method "reveal" prior to creating the global object
"secret_text"
You can try moving:
x= self.submit_bttn=Button(self, text="Submit", command=self.reveal(x))
below self.secret_text = "...."
You will also find that you have not defined something called
"self.submit_bttn"
and there are more errors beyond that, but that's past the scope of your
question.
On Tue, Jan 18, 2011 at 4:36 PM, David Holland <davholla2002 at yahoo.co.uk>wrote:
> Hi All,
> I hope this makes sense
>
> I am trying to write a GUI where you click on a button and each time you
> click on the button it shows in the entry text how many times you have
> clicked. However when I changed an earlier version of the code to pass a
> parameter it errors.
> This works :-
>
> from Tkinter import *
> class Application(Frame):
> """GUI App"""
> def __init__(self, master):
> """Initialize the frame."""
> Frame.__init__(self, master)
> self.grid()
> self.create_widgets()
>
> def create_widgets(self):
> self.inst_lbl=Label(self, text="Click on the button to get
> instructions")
> self.inst_lbl.grid(row=0, column=0, columnspan=2, sticky=W)
> self.pw_lbl=Label(self, text="Password")
> self.submit_bttn=Button(self, text="Submit", command=self.reveal)
> self.submit_bttn.grid(row=1, column=1, columnspan=2, sticky=W)
> self.secret_text=Text(self, width=35, height=5, wrap=WORD)
> self.secret_text.grid(row=2, column=1, columnspan=2, sticky=W)
> self.helpinfo()
>
> def reveal(self):
> Calmexob = Calmex()
> results = Calmexob.getmess()
> self.secret_text.delete(0.0, END)
> self.secret_text.insert(0.0,results)
>
> def helpinfo(self):
> self.secret_text.insert(0.0,"Start")
>
> class Calmex(object):
>
> def __init__(self):
> """Default arg"""
>
>
> def getmess(self):
> mesg="Test"
> return mesg
>
> #main
> root=Tk()
> root.title("Test")
> root.geometry("400x300")
> app=Application(root)
> root.mainloop()
>
>
> But when I changed it to use a number I get an error message.
> Here is the code
> from Tkinter import *
> class Application(Frame):
> """GUI App"""
> def __init__(self, master):
> """Initialize the frame."""
> Frame.__init__(self, master)
> self.grid()
> x=0
> self.create_widgets(x)
>
> def create_widgets(self,x):
> self.inst_lbl=Label(self, text="Click on the button to get
> instructions")
> self.inst_lbl.grid(row=0, column=0, columnspan=2, sticky=W)
> self.pw_lbl=Label(self, text="Password")
> x= self.submit_bttn=Button(self, text="Submit",
> command=self.reveal(x))
> self.submit_bttn.grid(row=1, column=1, columnspan=2, sticky=W)
> self.secret_text=Text(self, width=35, height=5, wrap=WORD)
> self.secret_text.grid(row=2, column=1, columnspan=2, sticky=W)
> self.helpinfo()
>
> def reveal(self, x):
> Calmexob = Calmex(x)
> results = Calmexob.getmess(x)
> self.secret_text.delete(0.0, END)
> self.secret_text.insert(0.0,results)
> x=x+1
> return x
>
> def helpinfo(self):
> self.secret_text.insert(0.0,"Start")
>
> class Calmex(object):
>
> def __init__(self,x):
> """Default arg"""
>
>
> def getmess(self,x):
> mesg="Test"+str(x)
> return mesg
>
> #main
> root=Tk()
> root.title("Test")
> root.geometry("400x300")
> app=Application(root)
> root.mainloop()
>
>
>
>
>
>
>
>
>
> The error message is
> AttributeError: Application instance has no attribute 'secret_text'
>
> The only change is that I have declared x and changed the function reveal
> to take and pass x as an arguement.
>
> Thanks in advance. I hope this makes sense.
>
>
>
>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110118/f55ae684/attachment.html>
More information about the Tutor
mailing list