diff -r 2a1b4ac63f3a Lib/test/test_tcl.py --- a/Lib/test/test_tcl.py Tue Mar 19 01:22:56 2013 -0700 +++ b/Lib/test/test_tcl.py Tue Mar 19 11:50:23 2013 +0200 @@ -175,6 +175,30 @@ self.assertEqual(passValue(f), f) self.assertEqual(passValue((1, '2', (3.4,))), (1, '2', (3.4,))) + def test_splitlist(self): + splitlist = self.interp.tk.splitlist + self.assertRaises(TypeError, splitlist) + self.assertRaises(TypeError, splitlist, 'a', 'b') + self.assertRaises(TypeError, splitlist, 2) + self.assertEqual(splitlist('2'), ('2',)) + self.assertEqual(splitlist('a\n b\t\r c\n '), ('a', 'b', 'c')) + self.assertEqual(splitlist(b'a\n b\t\r c\n '), ('a', 'b', 'c')) + self.assertEqual(splitlist('a \u20ac'), ('a', '\u20ac')) + self.assertEqual(splitlist(b'a \xe2\x82\xac'), ('a', '\u20ac')) + self.assertEqual(splitlist('a {b c}'), ('a', 'b c')) + self.assertEqual(splitlist(r'a b\ c'), ('a', 'b c')) + self.assertEqual(splitlist(('a', 'b c')), ('a', 'b c')) + self.assertEqual(splitlist('a 2'), ('a', '2')) + self.assertEqual(splitlist(('a', 2)), ('a', 2)) + self.assertEqual(splitlist('a 3.4'), ('a', '3.4')) + self.assertEqual(splitlist(('a', 3.4)), ('a', 3.4)) + call = self.interp.tk.call + self.assertEqual(splitlist(call('list', 1, '2', (3.4,))), + (1, '2', (3.4,))) + self.assertEqual(splitlist(call('dict', 'create', + 1, '2', b'\xe2\x82\xac', (3.4,))), + (1, '2', '\u20ac', (3.4,))) + def test_main(): support.run_unittest(TclTest, TkinterTest) diff -r 2a1b4ac63f3a Modules/_tkinter.c --- a/Modules/_tkinter.c Tue Mar 19 01:22:56 2013 -0700 +++ b/Modules/_tkinter.c Tue Mar 19 11:50:23 2013 +0200 @@ -1721,16 +1721,35 @@ char *list; int argc; char **argv; - PyObject *v; + PyObject *arg, *v; int i; - if (PyTuple_Size(args) == 1) { - v = PyTuple_GetItem(args, 0); - if (PyTuple_Check(v)) { - Py_INCREF(v); - return v; + if (!PyArg_ParseTuple(args, "O:splitlist", &arg)) + return NULL; + if (PyTclObject_Check(arg)) { + int objc; + Tcl_Obj **objv; + if (Tcl_ListObjGetElements(Tkapp_Interp(self), + ((PyTclObject*)arg)->value, + &objc, &objv) == TCL_ERROR) { + return Tkinter_Error(self); } + if (!(v = PyTuple_New(objc))) + return NULL; + for (i = 0; i < objc; i++) { + PyObject *s = FromObj(self, objv[i]); + if (!s || PyTuple_SetItem(v, i, s)) { + Py_DECREF(v); + return NULL; + } + } + return v; } + if (PyTuple_Check(arg)) { + Py_INCREF(arg); + return arg; + } + if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list)) return NULL;