Re: tkinter questions: behavior of StringVar, etc

Alan G Isaac ha scritto:
On Mar 28, 2:15 pm, Alan G Isaac <> wrote:
I'm a complete newbie to GUI. I have a couple questions about tkinter.

1. Where is the list of changes in Python 3's tkinter?

2. What exactly is the role of the root object, traditionally created as ``root=tk.Tk()``?
What is an example where one should create this
before creating a Frame instance (which will
otherwise implicitly create one as its master)?

2'. Suppose I ``import tkinter as tk`` and then try ``s1=tk.StringVar()``. This fails
because no "master" is set. Why does a
Variable need a master?

3. Now suppose I set ``root = tk.TK()`` and then try ``s1=tk.StringVar()``. This
works fine but now seems a bit magical:
how has the value of the "master" been

4. Another bit of magic:
Suppose I ``import tkinter as tk`` and
then try ``f1=tk.Frame()``. This works
fine: apparently calling Frame also
leads to implicit creation of a "master".
Why is what is good for the gander (i.e.,
implicit master creation for a Frame) not
good for the goose (i.e., a Variable)?
(Here I assume that there has been an
answer to 2. above.)

5. Reading around a bit, it seems common to recommend setting
the values of Variables rather than initializing
them. Why? I cannot see the reason to avoid
``s1=tk.StringVar(value="this works fine")``
and it looks like ``tk.StringVar(()`` is in any
case initialized (to an empty string).

6. Why is str(s1) not its value? More generally, why does a StringVar not behave more like a string?

On 3/28/2009 6:19 PM Mike Driscoll apparently wrote:
Try Google and the Python website. There is tons of info on the Python wiki: There are also some books that walk you through Tkinter application creation, for example,Lutz's "Programming Python".

Sorry, but I do not see the answers to any of the above
questions, not even the first one. Do you? (One might
believe question 2 is answered, but if you read it, I
think you will see why I do not.)

Alan Isaac

I think you need a bit of background (if not, just ignore this post):

1. Tkinter is only a thin wrapper over Tk, a GUI library initially developed for Tcl language, so many of the answer to the design choices you question (e.g. what is the master) cannot between answered within the python documentation but should be searched in the Tcl/Tk documentation. So google for tcl/tk.
Anyway, all GUI libraries I know of build the GUI as a hierarchical
structure. The master (often called root) ia the root of this
hierarchy, and you have to build it before building the rest.

2. Another good source of information is the source of Tkinter itself, which is mostly in the file. This is available in your python
installation, so dig into it: if you for instance look at the __init__ method of the Variable class (which is the basic class of StringVar), you will easily find the 'magic' to which you refer to.
If you don't like the choices which have been made there (e.g not
automagically creatinga a master for variables but doing it for frames ), you could try and submit a patch :-)

3. Usually the changes between one version of python and the next are documented (but not in all gory details) in "What is new" documents you can find in site. I'm not aware of any change for Tkinter,
in Python 3.0 but go read it yourself. If you want more details you could always fetch the file (or others) of bot versions and
make a diff.