|
|
|
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)
|
|
|
|
|