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:

#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() )
    self.goodbye_button.pack()

  def quit():
    self.window.destroy()

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

The second one was more trouble but I finally got it to work.

# exer2.py

import tkinter

class Count:

  def __init__(self):
    ''' Increment a button labeled 0, by 1 with each click '''
    self.frame = tkinter.Frame(window)
    self.frame.pack()
    self.label = tkinter.StringVar()
    self.label.set('0')
    self.count_btn = tkinter.Button(self.frame, textvariable=self.label,
      command=lambda: self.increment(self.label ))
    self.count_btn.pack()

  def increment(self, label):
    count = int(self.label.get())
    self.label.set(str(count + 1))

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

I am having trouble understanding the difference between the two lines that contain lambda: command= .In exer1.py I can do command=lambda: quit(). In exer2.py if I do command=lambda: increment(self.label) I get this error:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
    return self.func(*args)
  File "exer2.py", line 14, in <lambda>
    command=lambda: increment(self.label ))
NameError: name 'increment' is not defined

Why do I get this error? The situations look the same to me but they must be different somehow and I just don't see the difference.

Thanks,  Jim

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

Reply via email to