| Source: http://github.com/nanotube/pmw_fixes/commit/5e6dcbdaef2bb6c40037b922dd0efa081f1575ab (Daniel Folkinshteyn) |
| |
| fix bug in OptionMenu.setitems, introduced with the fixing of this python |
| bug: |
| http://bugs.python.org/issue1342811 |
| |
| versions of python 2.5.4 and newer now automatically delete commands when |
| items are deleted |
| however, that causes error if the command is deleted manually beforehand. |
| old versions, on the contrary, require manual command deletion to free up |
| the objects. |
| |
| so we put in a python version check to see if we need to manually delete |
| commands. |
| |
| fixes the Pmw bug referred to here: |
| http://sourceforge.net/forum/forum.php?thread_id=3283195&forum_id=33675 |
| and here: |
| http://sourceforge.net/tracker/?func=detail&aid=2795731&group_id=10743&ati |
| d=110743 |
| |
| --- a/src/Pmw/Pmw_1_3/lib/PmwOptionMenu.py |
| +++ b/src/Pmw/Pmw_1_3/lib/PmwOptionMenu.py |
| @@ -1,6 +1,7 @@ |
| import types |
| import Tkinter |
| import Pmw |
| +import sys |
| |
| class OptionMenu(Pmw.MegaWidget): |
| |
| @@ -59,11 +60,17 @@ class OptionMenu(Pmw.MegaWidget): |
| |
| def setitems(self, items, index = None): |
| |
| - # Clean up old items and callback commands. |
| - for oldIndex in range(len(self._itemList)): |
| - tclCommandName = str(self._menu.entrycget(oldIndex, 'command')) |
| - if tclCommandName != '': |
| - self._menu.deletecommand(tclCommandName) |
| + # python version check |
| + # python versions >= 2.5.4 automatically clean commands |
| + # and manually cleaning them causes errors when deleting items |
| + |
| + if sys.version_info[0] * 100 + sys.version_info[1] * 10 + \ |
| + sys.version_info[2] < 254: |
| + # Clean up old items and callback commands. |
| + for oldIndex in range(len(self._itemList)): |
| + tclCommandName = str(self._menu.entrycget(oldIndex, 'command')) |
| + if tclCommandName != '': |
| + self._menu.deletecommand(tclCommandName) |
| self._menu.delete(0, 'end') |
| self._itemList = list(items) |
| |