[wxPython-users] Mystery: wx.grid, a filter function, and Unicode

Bob Klahn bobstones at comcast.net
Thu Jan 3 05:53:07 PST 2008


No, Marc, it's not possible.  translate takes two arguments when used 
with plain strings, and one argument when used with Unicode strings.

As I said, filters generated by makefilter work perfectly outside of 
my wxPython application.

Bob

At 01:52 AM 1/3/2008, Marc wrote:
>I may be naive here, but isn't it possible that the error means 
>exactly what it says: translate() takes one argument, and you're 
>calling it with two : s.translate(allchars, delchars)
>
>I agree that the exception's being called a "TypeError" is a bit 
>misleading - I would have called it a ParameterError or ArgumentError, maybe.
>
>On Jan 2, 2008 10:11 PM, Bob Klahn 
><<mailto:bobklahn at comcast.net>bobklahn at comcast.net> wrote:
>(This is the same note I sent a few minutes ago, but with a P.S. 
>identifying my wxPython/Python/OS versions.)
>
>
>Here's a character-filter-generating function (a minor variation 
>of  a recipe in "Python Cookbook" section 1.10) that I'm using in 
>one of my applications:
>
>         def makefilter( chars, delete=True ):
>              """
>              Given a string of plain characters to (a) keep or (b) delete,
>              build a filtering function that, applied to any string s,
>              returns a copy of s containing
>                (a) only the characters to be kept, or
>                (b) all but the characters to be deleted.
>              """
>              import string
>              allchars = string.maketrans('','')
>              if delete: delchars = chars
>              else:      delchars = allchars.translate(allchars, chars)
>              def thefilter(s):
>                  return s.translate(allchars, delchars)
>              return thefilter
>
>I'm using the above function inside a wx.grid cell renderer:
>
>         class CellRenderer(gridlib.PyGridCellRenderer):
>              def __init__(self):
>                  gridlib.PyGridCellRenderer.__init__(self)
>                  self.filter = utils.makefilter('{}\x08\x0C',delete=True)
>
>The problem:  When the cell renderer executes and the filter is 
>invoked (e.g., as self.filter(word) ), it fails on the
>         return s.translate(allchars, delchars)
>line in makefilter:
>     TypeError: translate() takes exactly one argument (2 given)
>
>I.e, Python thinks that string s is a Unicode string.  But I'm not 
>using Unicode strings anywhere!  Any ideas where wxPython might be 
>changing my plain strings into Unicode strings?  I'm not able to 
>provide a simple code example.
>
>Filters generated by makefilter work perfectly outside of my 
>wxPython application.
>
>Bob
>
>P.S. I'm using wxPython <http://2.8.4.0>2.8.4.0 with Python 2.5.1 
>under Windows XP SP2.
>
>
>
>
>
>--
><http://www.fsrtechnologies.com>www.fsrtechnologies.com
>No virus found in this incoming message.
>Checked by AVG Free Edition.
>Version: 7.5.516 / Virus Database: 269.17.13/1207 - Release Date: 
>1/2/2008 11:29 AM

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.wxwidgets.org/pipermail/wxpython-users/attachments/20080103/b1b3c75b/attachment.htm


More information about the wxpython-users mailing list