(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 2.8.4.0 with Python 2.5.1 under Windows XP
SP2.