diff -r de01f7c37b53 Modules/_tkinter.c --- a/Modules/_tkinter.c Sat May 17 20:02:28 2014 -0700 +++ b/Modules/_tkinter.c Sun May 18 23:41:15 2014 +0300 @@ -242,6 +242,7 @@ int dispatching; /* We cannot include tclInt.h, as this is internal. So we cache interesting types here. */ + Tcl_ObjType *OldBooleanType; Tcl_ObjType *BooleanType; Tcl_ObjType *ByteArrayType; Tcl_ObjType *DoubleType; @@ -575,7 +576,8 @@ } #endif - v->BooleanType = Tcl_GetObjType("boolean"); + v->OldBooleanType = Tcl_GetObjType("boolean"); + v->BooleanType = Tcl_GetObjType("booleanString"); v->ByteArrayType = Tcl_GetObjType("bytearray"); v->DoubleType = Tcl_GetObjType("double"); v->IntType = Tcl_GetObjType("int"); @@ -968,15 +970,18 @@ { PyObject *result = NULL; TkappObject *app = (TkappObject*)tkapp; + Tcl_Interp *interp = Tkapp_Interp(tkapp); if (value->typePtr == NULL) { return unicodeFromTclStringAndSize(value->bytes, value->length); } - if (value->typePtr == app->BooleanType) { - result = value->internalRep.longValue ? Py_True : Py_False; - Py_INCREF(result); - return result; + if (value->typePtr == app->BooleanType || + value->typePtr == app->OldBooleanType) { + int boolValue; + if (Tcl_GetBooleanFromObj(interp, value, &boolValue) == TCL_ERROR) + return Tkinter_Error(tkapp); + return PyBool_FromLong(boolValue); } if (value->typePtr == app->ByteArrayType) { @@ -999,15 +1004,14 @@ PyObject *elem; Tcl_Obj *tcl_elem; - status = Tcl_ListObjLength(Tkapp_Interp(tkapp), value, &size); + status = Tcl_ListObjLength(interp, value, &size); if (status == TCL_ERROR) return Tkinter_Error(tkapp); result = PyTuple_New(size); if (!result) return NULL; for (i = 0; i < size; i++) { - status = Tcl_ListObjIndex(Tkapp_Interp(tkapp), - value, i, &tcl_elem); + status = Tcl_ListObjIndex(interp, value, i, &tcl_elem); if (status == TCL_ERROR) { Py_DECREF(result); return Tkinter_Error(tkapp);