summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-12-25 16:35:20 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2013-12-25 16:35:20 +0200
commit2cd31b77faf2e2c4295f3aee7832f10ebbc7fb97 (patch)
tree47454cb3c30167e21c861e67c064fab00f411d20
parent0107e90289ee2c7a725cfb2d8618b829039a92d8 (diff)
downloadcpython-2cd31b77faf2e2c4295f3aee7832f10ebbc7fb97.tar.gz
Issue #19020: Tkinter now uses splitlist() instead of split() in configure
methods.
-rw-r--r--Lib/lib-tk/Tix.py44
-rw-r--r--Lib/lib-tk/Tkinter.py39
-rw-r--r--Lib/lib-tk/test/widget_tests.py4
-rw-r--r--Misc/NEWS3
4 files changed, 35 insertions, 55 deletions
diff --git a/Lib/lib-tk/Tix.py b/Lib/lib-tk/Tix.py
index 29d7572477..1f28e56f74 100644
--- a/Lib/lib-tk/Tix.py
+++ b/Lib/lib-tk/Tix.py
@@ -122,13 +122,9 @@ class tixCommand:
elif cnf:
cnf = _cnfmerge(cnf)
if cnf is None:
- cnf = {}
- for x in self.tk.split(self.tk.call('tix', 'configure')):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
+ return self._getconfigure('tix', 'configure')
if isinstance(cnf, StringType):
- x = self.tk.split(self.tk.call('tix', 'configure', '-'+cnf))
- return (x[0][1:],) + x[1:]
+ return self._getconfigure1('tix', 'configure', '-'+cnf)
return self.tk.call(('tix', 'configure') + self._options(cnf))
def tix_filedialog(self, dlgclass=None):
@@ -380,7 +376,7 @@ class TixWidget(Tkinter.Widget):
"""Return the name of all subwidgets."""
try:
x = self.tk.call(self._w, 'subwidgets', '-all')
- return self.tk.split(x)
+ return self.tk.splitlist(x)
except TclError:
return None
@@ -473,13 +469,6 @@ class TixSubWidget(TixWidget):
self.tk.call('destroy', self._w)
-# Useful func. to split Tcl lists and return as a dict. From Tkinter.py
-def _lst2dict(lst):
- dict = {}
- for x in lst:
- dict[x[0][1:]] = (x[0][1:],) + x[1:]
- return dict
-
# Useful class to create a display style - later shared by many items.
# Contributed by Steffen Kremser
class DisplayStyle:
@@ -515,10 +504,8 @@ class DisplayStyle:
self.tk.call(self.stylename, 'configure', '-%s'%key, value)
def config(self, cnf={}, **kw):
- return _lst2dict(
- self.tk.split(
- self.tk.call(
- self.stylename, 'configure', *self._options(cnf,kw))))
+ return self._getconfigure(
+ self.stylename, 'configure', *self._options(cnf,kw))
def __getitem__(self,key):
return self.tk.call(self.stylename, 'cget', '-%s'%key)
@@ -928,9 +915,7 @@ class HList(TixWidget, XView, YView):
def header_configure(self, col, cnf={}, **kw):
if cnf is None:
- return _lst2dict(
- self.tk.split(
- self.tk.call(self._w, 'header', 'configure', col)))
+ return self._getconfigure(self._w, 'header', 'configure', col)
self.tk.call(self._w, 'header', 'configure', col,
*self._options(cnf, kw))
@@ -955,9 +940,8 @@ class HList(TixWidget, XView, YView):
def indicator_configure(self, entry, cnf={}, **kw):
if cnf is None:
- return _lst2dict(
- self.tk.split(
- self.tk.call(self._w, 'indicator', 'configure', entry)))
+ return self._getconfigure(
+ self._w, 'indicator', 'configure', entry)
self.tk.call(
self._w, 'indicator', 'configure', entry, *self._options(cnf, kw))
@@ -1017,9 +1001,7 @@ class HList(TixWidget, XView, YView):
def item_configure(self, entry, col, cnf={}, **kw):
if cnf is None:
- return _lst2dict(
- self.tk.split(
- self.tk.call(self._w, 'item', 'configure', entry, col)))
+ return self._getconfigure(self._w, 'item', 'configure', entry, col)
self.tk.call(self._w, 'item', 'configure', entry, col,
*self._options(cnf, kw))
@@ -1038,9 +1020,7 @@ class HList(TixWidget, XView, YView):
def entryconfigure(self, entry, cnf={}, **kw):
if cnf is None:
- return _lst2dict(
- self.tk.split(
- self.tk.call(self._w, 'entryconfigure', entry)))
+ return self._getconfigure(self._w, 'entryconfigure', entry)
self.tk.call(self._w, 'entryconfigure', entry,
*self._options(cnf, kw))
@@ -1255,9 +1235,7 @@ class PanedWindow(TixWidget):
def paneconfigure(self, entry, cnf={}, **kw):
if cnf is None:
- return _lst2dict(
- self.tk.split(
- self.tk.call(self._w, 'paneconfigure', entry)))
+ return self._getconfigure(self._w, 'paneconfigure', entry)
self.tk.call(self._w, 'paneconfigure', entry, *self._options(cnf, kw))
def panes(self):
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index 718be6eb53..6a91ba9be9 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -1234,6 +1234,19 @@ class Misc:
exc, val, tb = sys.exc_type, sys.exc_value, sys.exc_traceback
root = self._root()
root.report_callback_exception(exc, val, tb)
+
+ def _getconfigure(self, *args):
+ """Call Tcl configure command and return the result as a dict."""
+ cnf = {}
+ for x in self.tk.splitlist(self.tk.call(*args)):
+ x = self.tk.splitlist(x)
+ cnf[x[0][1:]] = (x[0][1:],) + x[1:]
+ return cnf
+
+ def _getconfigure1(self, *args):
+ x = self.tk.splitlist(self.tk.call(*args))
+ return (x[0][1:],) + x[1:]
+
def _configure(self, cmd, cnf, kw):
"""Internal function."""
if kw:
@@ -1241,15 +1254,9 @@ class Misc:
elif cnf:
cnf = _cnfmerge(cnf)
if cnf is None:
- cnf = {}
- for x in self.tk.split(
- self.tk.call(_flatten((self._w, cmd)))):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
+ return self._getconfigure(_flatten((self._w, cmd)))
if type(cnf) is StringType:
- x = self.tk.split(
- self.tk.call(_flatten((self._w, cmd, '-'+cnf))))
- return (x[0][1:],) + x[1:]
+ return self._getconfigure1(_flatten((self._w, cmd, '-'+cnf)))
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
# These used to be defined in Widget:
def configure(self, cnf=None, **kw):
@@ -1271,8 +1278,8 @@ class Misc:
raise TypeError("Tkinter objects don't support 'in' tests.")
def keys(self):
"""Return a list of all resource names of this widget."""
- return map(lambda x: x[0][1:],
- self.tk.split(self.tk.call(self._w, 'configure')))
+ return [x[0][1:] for x in
+ self.tk.splitlist(self.tk.call(self._w, 'configure'))]
def __str__(self):
"""Return the window path name of this widget."""
return self._w
@@ -3725,16 +3732,10 @@ class PanedWindow(Widget):
"""
if cnf is None and not kw:
- cnf = {}
- for x in self.tk.split(
- self.tk.call(self._w,
- 'paneconfigure', tagOrId)):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
+ return self._getconfigure(self._w, 'paneconfigure', tagOrId)
if type(cnf) == StringType and not kw:
- x = self.tk.split(self.tk.call(
- self._w, 'paneconfigure', tagOrId, '-'+cnf))
- return (x[0][1:],) + x[1:]
+ return self._getconfigure1(
+ self._w, 'paneconfigure', tagOrId, '-'+cnf)
self.tk.call((self._w, 'paneconfigure', tagOrId) +
self._options(cnf, kw))
paneconfig = paneconfigure
diff --git a/Lib/lib-tk/test/widget_tests.py b/Lib/lib-tk/test/widget_tests.py
index 4c37aa4767..b943a10e08 100644
--- a/Lib/lib-tk/test/widget_tests.py
+++ b/Lib/lib-tk/test/widget_tests.py
@@ -66,9 +66,7 @@ class AbstractWidgetTest(object):
if not isinstance(widget, Scale):
t = widget.configure(name)
self.assertEqual(len(t), 5)
- ## XXX
- if not isinstance(t[4], tuple):
- self.assertEqual2(t[4], expected, eq=eq)
+ self.assertEqual2(t[4], expected, eq=eq)
def checkInvalidParam(self, widget, name, value, errmsg=None,
keep_orig=True):
diff --git a/Misc/NEWS b/Misc/NEWS
index 3e861f8b45..d9cd29ff2e 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,9 @@ Core and Builtins
Library
-------
+- Issue #19020: Tkinter now uses splitlist() instead of split() in configure
+ methods.
+
- Issue #12226: HTTPS is now used by default when connecting to PyPI.
- Issue #20048: Fixed ZipExtFile.peek() when it is called on the boundary of