diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2013-12-25 16:35:20 +0200 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2013-12-25 16:35:20 +0200 |
commit | 2cd31b77faf2e2c4295f3aee7832f10ebbc7fb97 (patch) | |
tree | 47454cb3c30167e21c861e67c064fab00f411d20 | |
parent | 0107e90289ee2c7a725cfb2d8618b829039a92d8 (diff) | |
download | cpython-2cd31b77faf2e2c4295f3aee7832f10ebbc7fb97.tar.gz |
Issue #19020: Tkinter now uses splitlist() instead of split() in configure
methods.
-rw-r--r-- | Lib/lib-tk/Tix.py | 44 | ||||
-rw-r--r-- | Lib/lib-tk/Tkinter.py | 39 | ||||
-rw-r--r-- | Lib/lib-tk/test/widget_tests.py | 4 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
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): @@ -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 |