Tkinter Dialog Management problems:
Eric Brunel
eric_brunel at despammed.com
Fri May 19 03:26:37 EDT 2006
On Thu, 18 May 2006 11:52:54 -0400, Michael Yanowitz
<m.yanowitz at kearfott.com> wrote:
> Thanks. That helped alot.
No problem.
> However it leaves a couple very minor problems which I think I can live
> with.
> 1) It brings up an empty additional 'main window'.
> I have tried using the Tkinter.NoDefaultRoot() option, but run into
> other problems with other things not defined.
> NameError: global name '_default_root' is not defined
> Exception exceptions.AttributeError: "IntVar instance has no attribute
> '_tk'" in
> <bound method IntVar.__del__ of <Tkinter.IntVar instance at 0x009C7990>>
> ignored
>
> 2) By deriving the 'dialog' from Tk, existing calls to self.pack() no
> longer are valid, but they don't appear to be necessary.
>
> My only 'Tkinter tutorial' is what is included in Orielly's
> "Programming
> Python". Still looking for a good tutorial. I am not clear what the
> difference
> between Tk() and Toplevel() are. They seem totally interchangeable.
No, they're not! Never - and I mean *never* - create two instances of Tk
in the same application! The Tk instance does not only represent the main
window for the application, but also creates the underlying tcl
interpreter. Creating two instances of Tk will then create two
interpreters and you'll never know which one executes your commands,
producing weird TclError's everywhere.
If you have a window which can be considered as the main window for your
application - there is only one of it, it is always there and closing it
means quitting the application -, then make it a sub-class of Tk. If you
do not have such a window, use the following trick at the beginning of
your application:
root = Tkinter.Tk()
root.withdraw()
This basically creates a main window and immediately hides it. All your
other windows must be sub-classes of Toplevel. Calling the quit method of
these windows should still quit the application, and calling the destroy
method should only close the window.
As for tutorials, there are many; just see there:
http://tkinter.unpy.net/wiki/Tkinter
Apart from the one already given by Rony (which is more a reference than a
tutorial), my favorite ones are:
- Stephen Ferg's "Thinking in Tkinter" -
http://www.ferg.org/thinking_in_tkinter/index.html
- The one at http://doctormickey.com/python/index.html
- Gerard Swinnen's "Apprendre a programmer avec Python" (in French) -
http://www.cifen.ulg.ac.be/inforef/swi/python.htm
At least, these ones avoid the confusion Frame/window usually found in
many others: the first two don't use inheritance at all; only the last
(the one in French) implements windows as sub-classes of Tk or Toplevel.
Unfortunately, I don't know any english translation of it.
A last advice: if you want to do serious Tkinter, it really helps to know
how the underlying tcl/tk layer works. So maybe you should learn at least
the basics of tcl/tk. And if you do that, you will be able to use tcl/tk
resources, such as:
http://www.tcl.tk/man/
which is the only documentation I ever need now...
HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
More information about the Python-list
mailing list