Package: python-pmw
Version: 1.3.2-3
Severity: important
Tags: patch

Hi,

with pycocuma, I'm running into the same issue as detailed in [1].
Luckily, there's already a fix: [2]

[1] 
http://sourceforge.net/tracker/index.php?func=detail&aid=2795731&group_id=10743&atid=110743
[2] 
http://github.com/nanotube/pmw_fixes/commit/5e6dcbdaef2bb6c40037b922dd0efa081f1575ab

I'm attaching a reduced diff (no identation fixes) that fixes the
problem for me.

Please let me know if you like me to NMU the problem.

Cheers,
Christoph
-- 
c...@df7cb.de | http://www.df7cb.de/
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)
 

Attachment: signature.asc
Description: Digital signature

Reply via email to