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. > #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". > 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() _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor