On 07/27/2016 03:12 AM, Peter Otten wrote:
Jim Byrnes wrote:

OOP has always driven me crazy.  I read the material and follow the
examples until I feel I understand them, but when I try to implement it
I end up with an error filled mess.

So I decided to give it another try.  When I got to the chapter on
tkinter I decided to solve all the exercises using OOP even though the
book solutions did not use OOP. The first one went fine:

No, it didn't. The Goodbye.quit() method is missing the self argument and
uses the inexistent self.window attribute.
You don't see these bugs when you run the script because there is a global
quit()... let's say function... that is called instead of the method.

You can put a print() into Goodbye.quit() to verify the above.

OK right. I ended up concentrating on exer2 when the problem was in exer1. I should have known better than using quit() as a name.

#exer1.py

import tkinter

class Goodbye:
   def __init__(self):

     self.frame = tkinter.Frame(window)
     self.frame.pack()

     self.goodbye_button = tkinter.Button(self.frame, text='Goodbye',
       #command=quit)
       command=lambda: quit() )

The lambda is superfluous -- command=quit will already invoke the global
quit(). But what you actually intended is achieved with command=self.quit.
self.quit is called "bound method".

Ok, thanks.

     self.goodbye_button.pack()

   def quit():
       print("you'll never see this")
     self.window.destroy()

if __name__=='__main__':
   window = tkinter.Tk()
   myapp = Goodbye()
   window.mainloop()


Regards,  Jim


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to