[Tkinter-discuss] StringVar fails to honor None

Russell Adams RLAdams at AdamsInfoServ.Com
Thu Jan 17 19:52:36 CET 2013


On Thu, Jan 17, 2013 at 11:59:00AM +0100, Michael Lange wrote:
> Hi Russell,
>
> On Wed, 16 Jan 2013 17:11:52 -0600
> Russell Adams <RLAdams at AdamsInfoServ.Com> wrote:
>
> > Found this while reverting a data entry form to database values (ie:
> > Undo), all my fields became "None". Set changes None to a string,
> > creating with value= doesn't.
> >
> > Seems inconsistent, is this intentional or to be expected?
>
> this seems like a feature or a bug in tkapp.globalsetvar().
>
> When we look at Variable.__init_(), we find:
>
> class Variable:
>     def __init__(self, master=None, value=None, name=None):
>         (...)
>         if value is not None:
>             self.set(value)
>
> so if value == None, value actually won't be applied.
> Now in set() it is simply:
>
>     def set(self, value):
>         """Set the variable to VALUE."""
>         return self._tk.globalsetvar(self._name, value)
>
> apparently globalsetvar() tries its best to convert anything it gets into
> a string.
> This is probably useful in most cases (for example when we pas
> an integer or a float to set()), but shows odd results sometimes. Setting
> the StringVar to boolean True or False e.g. actually sets its value to
> "1" or "0" ;)
> If I pass an empty dict or list to set(), I get the strings
> "{}" or "[]", which seems at least to be consistent with the behavior of
> set (None).
>

I can appreciate that. Is there a "proper" way to reset a Variable to
it's original state?

Thanks.

> I guess this is one of the tkinter oddities we have to live with, at
> least I don't see how this should be fixed without breaking existing
> code.
>
> Regards
>
> Michael
>
>
>
> .-.. .. ...- .   .-.. --- -. --.   .- -. -..   .--. .-. --- ... .--. . .-.
>
> Violence in reality is quite different from theory.
> 		-- Spock, "The Cloud Minders", stardate 5818.4
> _______________________________________________
> Tkinter-discuss mailing list
> Tkinter-discuss at python.org
> http://mail.python.org/mailman/listinfo/tkinter-discuss
>


------------------------------------------------------------------
Russell Adams                            RLAdams at AdamsInfoServ.com

PGP Key ID:     0x1160DCB3           http://www.adamsinfoserv.com/

Fingerprint:    1723 D8CA 4280 1EC9 557F  66E8 1154 E018 1160 DCB3


More information about the Tkinter-discuss mailing list