Patch #612602: Streamline configure methods.
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index 573d71d..f2c9a91 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -1067,6 +1067,23 @@
exc, val, tb = sys.exc_type, sys.exc_value, sys.exc_traceback
root = self._root()
root.report_callback_exception(exc, val, tb)
+ def _configure(self, cmd, cnf, kw):
+ """Internal function."""
+ if kw:
+ cnf = _cnfmerge((cnf, kw))
+ 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
+ if type(cnf) is StringType:
+ x = self.tk.split(
+ self.tk.call(_flatten((self._w, cmd, '-'+cnf))))
+ return (x[0][1:],) + x[1:]
+ self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
# These used to be defined in Widget:
def configure(self, cnf=None, **kw):
"""Configure resources of a widget.
@@ -1075,23 +1092,7 @@
arguments. To get an overview about
the allowed keyword arguments call the method keys.
"""
- # XXX ought to generalize this so tag_config etc. can use it
- if kw:
- cnf = _cnfmerge((cnf, kw))
- elif cnf:
- cnf = _cnfmerge(cnf)
- if cnf is None:
- cnf = {}
- for x in self.tk.split(
- self.tk.call(self._w, 'configure')):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
- if type(cnf) is StringType:
- x = self.tk.split(self.tk.call(
- self._w, 'configure', '-'+cnf))
- return (x[0][1:],) + x[1:]
- self.tk.call((self._w, 'configure')
- + self._options(cnf))
+ return self._configure('configure', cnf, kw)
config = configure
def cget(self, key):
"""Return the resource value for a KEY given as string."""
@@ -2043,19 +2044,7 @@
arguments. To get an overview about
the allowed keyword arguments call the method without arguments.
"""
- if cnf is None and not kw:
- cnf = {}
- for x in self.tk.split(
- self.tk.call(self._w,
- 'itemconfigure', tagOrId)):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
- if type(cnf) == StringType and not kw:
- x = self.tk.split(self.tk.call(
- self._w, 'itemconfigure', tagOrId, '-'+cnf))
- return (x[0][1:],) + x[1:]
- self.tk.call((self._w, 'itemconfigure', tagOrId) +
- self._options(cnf, kw))
+ return self._configure(('itemconfigure', tagOrId), cnf, kw)
itemconfig = itemconfigure
# lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift,
# so the preferred name for them is tag_lower, tag_raise
@@ -2383,18 +2372,7 @@
call the method without arguments.
Valid resource names: background, bg, foreground, fg,
selectbackground, selectforeground."""
- if cnf is None and not kw:
- cnf = {}
- for x in self.tk.split(
- self.tk.call(self._w, 'itemconfigure', index)):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
- if type(cnf) == StringType and not kw:
- x = self.tk.split(self.tk.call(
- self._w, 'itemconfigure', index, '-'+cnf))
- return (x[0][1:],) + x[1:]
- self.tk.call((self._w, 'itemconfigure', index) +
- self._options(cnf, kw))
+ return self._configure(('itemconfigure', index), cnf, kw)
itemconfig = itemconfigure
class Menu(Widget):
@@ -2481,18 +2459,7 @@
return self.tk.call(self._w, 'entrycget', index, '-' + option)
def entryconfigure(self, index, cnf=None, **kw):
"""Configure a menu item at INDEX."""
- if cnf is None and not kw:
- cnf = {}
- for x in self.tk.split(self.tk.call(
- (self._w, 'entryconfigure', index))):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
- if type(cnf) == StringType and not kw:
- x = self.tk.split(self.tk.call(
- (self._w, 'entryconfigure', index, '-'+cnf)))
- return (x[0][1:],) + x[1:]
- self.tk.call((self._w, 'entryconfigure', index)
- + self._options(cnf, kw))
+ return self._configure(('entryconfigure', index), cnf, kw)
entryconfig = entryconfigure
def index(self, index):
"""Return the index of a menu item identified by INDEX."""
@@ -2719,18 +2686,9 @@
if option[-1:] == "_":
option = option[:-1]
return self.tk.call(self._w, "image", "cget", index, option)
- def image_configure(self, index, cnf={}, **kw):
+ def image_configure(self, index, cnf=None, **kw):
"""Configure an embedded image at INDEX."""
- if not cnf and not kw:
- cnf = {}
- for x in self.tk.split(
- self.tk.call(
- self._w, "image", "configure", index)):
- cnf[x[0][1:]] = (x[0][1:],) + x[1:]
- return cnf
- apply(self.tk.call,
- (self._w, "image", "configure", index)
- + self._options(cnf, kw))
+ return self._configure(('image', 'configure', index), cnf, kw)
def image_create(self, index, cnf={}, **kw):
"""Create an embedded image at INDEX."""
return apply(self.tk.call,
@@ -2821,15 +2779,9 @@
if option[-1:] == '_':
option = option[:-1]
return self.tk.call(self._w, 'tag', 'cget', tagName, option)
- def tag_configure(self, tagName, cnf={}, **kw):
+ def tag_configure(self, tagName, cnf=None, **kw):
"""Configure a tag TAGNAME."""
- if type(cnf) == StringType:
- x = self.tk.split(self.tk.call(
- self._w, 'tag', 'configure', tagName, '-'+cnf))
- return (x[0][1:],) + x[1:]
- self.tk.call(
- (self._w, 'tag', 'configure', tagName)
- + self._options(cnf, kw))
+ return self._configure(('tag', 'configure', tagName), cnf, kw)
tag_config = tag_configure
def tag_delete(self, *tagNames):
"""Delete all tags in TAGNAMES."""
@@ -2874,16 +2826,9 @@
if option[-1:] == '_':
option = option[:-1]
return self.tk.call(self._w, 'window', 'cget', index, option)
- def window_configure(self, index, cnf={}, **kw):
+ def window_configure(self, index, cnf=None, **kw):
"""Configure an embedded window at INDEX."""
- if type(cnf) == StringType:
- x = self.tk.split(self.tk.call(
- self._w, 'window', 'configure',
- index, '-'+cnf))
- return (x[0][1:],) + x[1:]
- self.tk.call(
- (self._w, 'window', 'configure', index)
- + self._options(cnf, kw))
+ return self._configure(('window', 'configure', index), cnf, kw)
window_config = window_configure
def window_create(self, index, cnf={}, **kw):
"""Create a window at INDEX."""