Gigs_ wrote:
> Hi Im new to gui programming
> 
> from Tkinter import *                          # get widget classes
> from tkMessageBox import askokcancel           # get canned std dialog
> 
> class Quitter(Frame):                          # subclass our GUI
>      def __init__(self, parent=None):           # constructor method
>          Frame.__init__(self, parent)
>          self.pack()
>          widget = Button(self, text='Quit', command=self.quit)
>          widget.pack(side=LEFT)
>      def quit(self):
>          ans = askokcancel('Verify exit', "Really quit?")
>          if ans: Frame.quit(self)
> 
> class Demo(Frame):
>      def __init__(self, parent=None):
>          Frame.__init__(self, parent)
>          self.pack()
>          Label(self, text="Basic demos").pack()
>          for (key, value) in demos.items():
>              func = (lambda key=key: self.printit(key))
>              Button(self, text=key, command=func).pack(side=TOP, fill=BOTH)
>          Quitter(self).pack()    # here
>      def printit(self, name):
>          print name, 'returns =>', demos[name]()
> 
> 
> My problem is in class Demo. How is the best way to use class Quitter in 
> class Demo?
> should it be:
> Quitter(self).pack()
> Quitter(self)
> ...

The Quitter really needs to Destroy its parent, so you will need to have 
something like

         self.parent = parent

in the __init__() method to keep a reference to the parent frame. Then 
the quit() method can call self.parent.destroy() which will also result 
in the destruction of the child Quitter.

In this particular case you don't appear to need a reference to the 
Quitter object in the main Frame's code, so it's acceptable to use

     Quitter(self).pack()

However in the more general case yo umight want to be abel to refer to 
some subsidiary object in the Frame's methods, and in that case the 
easiest way to do so is to save that reference when you create the 
object, than pack the obejct separately, as in

     self.quitter = Quitter(self)
     self.quitter.pack()

Here's a simple program to show you the difference between quit() and 
destroy(). You will notice that you have to press the Quit button twice, 
but the Destroy button only once - once the window is destroyed calling 
its mainloop() method no longer does anything.

from Tkinter import *
t = Tk()
Button(t, command=t.quit, text="Quit").pack()
Button(t, command=t.destroy, text="Destroy").pack()
t.mainloop()
t.mainloop()

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb     http://del.icio.us/steve.holden
Blog of Note:          http://holdenweb.blogspot.com
See you at PyCon?         http://us.pycon.org/TX2007

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to