diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-07 17:27:42 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-07 17:27:42 (GMT) |
commit | a21acb5d95841e7d2c8491f40189a853cb7b5df4 (patch) | |
tree | 10b5b71cb87b5edb5eefc48b08b3abc912b6a5ed /Lib/tkinter/ttk.py | |
parent | 0455c3fd28256940ad02ac39335816c1bdab0af9 (diff) | |
download | cpython-a21acb5d95841e7d2c8491f40189a853cb7b5df4.zip cpython-a21acb5d95841e7d2c8491f40189a853cb7b5df4.tar.gz cpython-a21acb5d95841e7d2c8491f40189a853cb7b5df4.tar.bz2 |
Issue #20072: Fixed multiple errors in tkinter with wantobjects is False.
* Misc.image_names(), Misc.image_types(), Wm.wm_colormapwindows(), and
LabelFrame.panes() now always return a tuple.
* Fixed error of comparing str and int in tt.LabeledScale._adjust().
* ttk.Notebook.index() now always returns int.
* ttk.Notebook.tabs() now always returns a tuple.
* ttk.Entry.bbox() now always returns a tuple of ints.
* ttk.Entry.validate() now always correctly works.
* ttk.Combobox.current() now always returns int.
* ttk.Panedwindow.sashpos() now always returns int.
* ttk.Treeview.bbox() now always returns a tuple of ints.
* ttk.Treeview.get_children() now always returns a tuple.
* ttk.Treeview.exists() now always correctly works.
* ttk.Treeview.index() now always returns int.
* ttk.Treeview.tag_has() now always returns 0 or 1.
* And numerous other errors in methods which returns a tuple, list or dict.
* Fixed ttk tests for wantobjects is False.
Diffstat (limited to 'Lib/tkinter/ttk.py')
-rw-r--r-- | Lib/tkinter/ttk.py | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 6cd4ea6..ca90273 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -293,6 +293,9 @@ def _list_from_layouttuple(ltuple): indx += 2 if opt == 'children': + if (tkinter._default_root and + not tkinter._default_root.wantobjects()): + val = tkinter._default_root.splitlist(val) val = _list_from_layouttuple(val) opts[opt] = val @@ -313,6 +316,8 @@ def _val_or_dict(options, func, *args): if len(options) % 2: # option specified without a value, return its value return res + if tkinter._default_root: + res = tkinter._default_root.splitlist(res) return _dict_from_tcltuple(res) def _convert_stringval(value): @@ -325,6 +330,14 @@ def _convert_stringval(value): return value +def _to_number(x): + if isinstance(x, str): + if '.' in x: + x = float(x) + else: + x = int(x) + return x + def tclobjs_to_py(adict): """Returns adict with its values converted from Tcl objects to Python objects.""" @@ -395,8 +408,8 @@ class Style(object): or something else of your preference. A statespec is compound of one or more states and then a value.""" if query_opt is not None: - return _list_from_statespec( - self.tk.call(self._name, "map", style, '-%s' % query_opt)) + return _list_from_statespec(self.tk.splitlist( + self.tk.call(self._name, "map", style, '-%s' % query_opt))) return _dict_from_tcltuple( self.tk.call(self._name, "map", style, *(_format_mapdict(kw)))) @@ -453,8 +466,8 @@ class Style(object): lspec = "null" # could be any other word, but this may make sense # when calling layout(style) later - return _list_from_layouttuple( - self.tk.call(self._name, "layout", style, lspec)) + return _list_from_layouttuple(self.tk.splitlist( + self.tk.call(self._name, "layout", style, lspec))) def element_create(self, elementname, etype, *args, **kw): @@ -466,12 +479,12 @@ class Style(object): def element_names(self): """Returns the list of elements defined in the current theme.""" - return self.tk.call(self._name, "element", "names") + return self.tk.splitlist(self.tk.call(self._name, "element", "names")) def element_options(self, elementname): """Return the list of elementname's options.""" - return self.tk.call(self._name, "element", "options", elementname) + return self.tk.splitlist(self.tk.call(self._name, "element", "options", elementname)) def theme_create(self, themename, parent=None, settings=None): @@ -505,7 +518,7 @@ class Style(object): def theme_names(self): """Returns a list of all known themes.""" - return self.tk.call(self._name, "theme", "names") + return self.tk.splitlist(self.tk.call(self._name, "theme", "names")) def theme_use(self, themename=None): @@ -568,7 +581,8 @@ class Widget(tkinter.Widget): matches statespec and False otherwise. If callback is specified, then it will be invoked with *args, **kw if the widget state matches statespec. statespec is expected to be a sequence.""" - ret = self.tk.call(self._w, "instate", ' '.join(statespec)) + ret = self.tk.getboolean( + self.tk.call(self._w, "instate", ' '.join(statespec))) if ret and callback: return callback(*args, **kw) @@ -667,7 +681,7 @@ class Entry(Widget, tkinter.Entry): def bbox(self, index): """Return a tuple of (x, y, width, height) which describes the bounding box of the character given by index.""" - return self.tk.call(self._w, "bbox", index) + return self._getints(self.tk.call(self._w, "bbox", index)) def identify(self, x, y): @@ -680,7 +694,7 @@ class Entry(Widget, tkinter.Entry): """Force revalidation, independent of the conditions specified by the validate option. Returns False if validation fails, True if it succeeds. Sets or clears the invalid state accordingly.""" - return bool(self.tk.call(self._w, "validate")) + return bool(self.tk.getboolean(self.tk.call(self._w, "validate"))) class Combobox(Entry): @@ -707,6 +721,8 @@ class Combobox(Entry): element at position newindex in the list of values. Otherwise, returns the index of the current value in the list of values or -1 if the current value does not appear in the list.""" + if newindex is None: + return self.tk.getint(self.tk.call(self._w, "current")) return self.tk.call(self._w, "current", newindex) @@ -861,7 +877,7 @@ class Notebook(Widget): def index(self, tab_id): """Returns the numeric index of the tab specified by tab_id, or the total number of tabs if tab_id is the string "end".""" - return self.tk.call(self._w, "index", tab_id) + return self.tk.getint(self.tk.call(self._w, "index", tab_id)) def insert(self, pos, child, **kw): @@ -896,7 +912,7 @@ class Notebook(Widget): def tabs(self): """Returns a list of windows managed by the notebook.""" - return self.tk.call(self._w, "tabs") or () + return self.tk.splitlist(self.tk.call(self._w, "tabs") or ()) def enable_traversal(self): @@ -979,7 +995,7 @@ class Panedwindow(Widget, tkinter.PanedWindow): constrained to be between 0 and the total size of the widget. Returns the new position of sash number index.""" - return self.tk.call(self._w, "sashpos", index, newpos) + return self.tk.getint(self.tk.call(self._w, "sashpos", index, newpos)) PanedWindow = Panedwindow # tkinter name compatibility @@ -1179,14 +1195,15 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): If column is specified, returns the bounding box of that cell. If the item is not visible (i.e., if it is a descendant of a closed item or is scrolled offscreen), returns an empty string.""" - return self.tk.call(self._w, "bbox", item, column) + return self._getints(self.tk.call(self._w, "bbox", item, column)) or '' def get_children(self, item=None): """Returns a tuple of children belonging to item. If item is not specified, returns root children.""" - return self.tk.call(self._w, "children", item or '') or () + return self.tk.splitlist( + self.tk.call(self._w, "children", item or '') or ()) def set_children(self, item, *newchildren): @@ -1227,7 +1244,7 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): def exists(self, item): """Returns True if the specified item is present in the tree, False otherwise.""" - return bool(self.tk.call(self._w, "exists", item)) + return bool(self.tk.getboolean(self.tk.call(self._w, "exists", item))) def focus(self, item=None): @@ -1309,7 +1326,7 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): def index(self, item): """Returns the integer index of item within its parent's list of children.""" - return self.tk.call(self._w, "index", item) + return self.tk.getint(self.tk.call(self._w, "index", item)) def insert(self, parent, index, iid=None, **kw): @@ -1418,7 +1435,7 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): value of given column in given item to the specified value.""" res = self.tk.call(self._w, "set", item, column, value) if column is None and value is None: - return _dict_from_tcltuple(res, False) + return _dict_from_tcltuple(self.tk.splitlist(res), False) else: return res @@ -1449,7 +1466,8 @@ class Treeview(Widget, tkinter.XView, tkinter.YView): all items which have the specified tag. * Availability: Tk 8.6""" - return self.tk.call(self._w, "tag", "has", tagname, item) + return self.tk.getboolean( + self.tk.call(self._w, "tag", "has", tagname, item)) # Extensions @@ -1521,7 +1539,8 @@ class LabeledScale(Frame): self.label.place_configure(x=x, y=y) - from_, to = self.scale['from'], self.scale['to'] + from_ = _to_number(self.scale['from']) + to = _to_number(self.scale['to']) if to < from_: from_, to = to, from_ newval = self._variable.get() |