[Python-bugs-list] [ python-Bugs-671741 ] Tk.IntVar.get fails after set(True) in 2.3a1

SourceForge.net noreply@sourceforge.net
Tue, 21 Jan 2003 11:59:30 -0800


Bugs item #671741, was opened at 2003-01-21 14:06
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=671741&group_id=5470

Category: Python Library
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Edward K. Ream (edream)
Assigned to: Nobody/Anonymous (nobody)
Summary: Tk.IntVar.get fails after set(True) in 2.3a1

Initial Comment:
Executing the following fails in 2.3a1.  Similar code 
works in 2.1 and 2.2.

def truebug():

    import Tkinter
    Tk = Tkinter
    top = Tk.Toplevel()
    f = Tk.Frame(top)
    f.pack()
    var = Tk.IntVar()
    box = Tk.Checkbutton(f, anchor="w", 
text="box",variable=var)
    box.pack()
    var.set(True)
    val = var.get()

Example:

Microsoft Windows XP [Version 5.1.2600]
...
Python 2.3a1 (#38, Dec 31 2002, 17:53:59) [MSC 
v.1200 32 bit (Intel)] on win32
...
>>> import truebug
>>> truebug.truebug()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "c:\prog\test\truebug.py", line 15, in truebug
    val = var.get()
  File "C:\PYTHON23\lib\lib-tk\Tkinter.py", line 239, in get
    return getint(self._tk.globalgetvar(self._name))
ValueError: invalid literal for int(): True
>>>

Edward
--------------------------------------------------------------------
Edward K. Ream   email:  edream@tds.net
Leo: Literate Editor with Outlines
Leo: http://personalpages.tds.net/~edream/front.html
--------------------------------------------------------------------

----------------------------------------------------------------------

Comment By: Christos Georgiou (tzot)
Date: 2003-01-21 21:59

Message:
Logged In: YES 
user_id=539787

First thought: why not use a BooleanVar?

The problem is that if you do a var.set(True), _tkinter 
translates the argument into a string (_tkinter.c, function 
SetVar after some levels of calling), because I think 
everything in tcl is a string.  In Python pre-2.2.2, str(True) was 
still "1".

What you get in your case by var.get, is the string "True"
(try
print int("True")
or, if you check the Tkinter.py script, try at the end of your 
example:
m= var._tk.globalgetvar(var._name)
and check the type of m.

Resolving this (to allow a bool in an IntVar), one could 
override Tkinter.IntVar.set, perhaps, to allow boolean 
arguments for integer variables (just converting to int before 
calling the Tkinter.Variable.set).

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=671741&group_id=5470