diff options
author | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2008-11-04 06:26:27 (GMT) |
---|---|---|
committer | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2008-11-04 06:26:27 (GMT) |
commit | a18424c624b5720bce542d306b464660675751b0 (patch) | |
tree | 406f56cab4a1156fd4f6a4a726c037dab515b251 /Lib/tkinter | |
parent | b46a633eaf23c43865dd25e0a38e36a4444059a0 (diff) | |
download | cpython-a18424c624b5720bce542d306b464660675751b0.zip cpython-a18424c624b5720bce542d306b464660675751b0.tar.gz cpython-a18424c624b5720bce542d306b464660675751b0.tar.bz2 |
Issue #3774: Fixed an error when create a Tkinter menu item without command
and then remove it. Written by Guilherme Polo (gpolo). Ported r67082.
Diffstat (limited to 'Lib/tkinter')
-rw-r--r-- | Lib/tkinter/__init__.py | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index bb014b3..63cb895 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -1913,6 +1913,8 @@ class BaseWidget(Misc): cnf = _cnfmerge((cnf, kw)) self.widgetName = widgetName BaseWidget._setup(self, master, cnf) + if self._tclCommands is None: + self._tclCommands = [] classes = [(k, v) for k, v in cnf.items() if isinstance(k, type)] for k, v in classes: del cnf[k] @@ -2648,21 +2650,20 @@ class Menu(Widget): """Add separator at INDEX.""" self.insert(index, 'separator', cnf or kw) def delete(self, index1, index2=None): - """Delete menu items between INDEX1 and INDEX2 (not included).""" + """Delete menu items between INDEX1 and INDEX2 (included).""" if index2 is None: index2 = index1 - cmds = [] - (num_index1, num_index2) = (self.index(index1), self.index(index2)) - if (num_index1 is not None) and (num_index2 is not None): - for i in range(num_index1, num_index2 + 1): - if 'command' in self.entryconfig(i): - c = str(self.entrycget(i, 'command')) - if c in self._tclCommands: - cmds.append(c) - self.tk.call(self._w, 'delete', index1, index2) - for c in cmds: - self.deletecommand(c) + num_index1, num_index2 = self.index(index1), self.index(index2) + if (num_index1 is None) or (num_index2 is None): + num_index1, num_index2 = 0, -1 + + for i in range(num_index1, num_index2 + 1): + if 'command' in self.entryconfig(i): + c = str(self.entrycget(i, 'command')) + if c: + self.deletecommand(c) + self.tk.call(self._w, 'delete', index1, index2) def entrycget(self, index, option): """Return the resource value of an menu item for OPTION at INDEX.""" return self.tk.call(self._w, 'entrycget', index, '-' + option) |