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: https://sourceforge.net/forum/forum.php?thread_id=3283195&forum_id=33675 and here: https://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)