python segfaulting, MemoryError (PyQt)
Denis L
no at spam.com
Tue Apr 28 08:54:41 EDT 2009
"Phil Thompson" <phil at riverbankcomputing.com> wrote in message
news:mailman.4664.1240907352.11746.python-list at python.org...
> On Tue, 28 Apr 2009 03:53:34 +0200, "Denis L" <no at spam.com> wrote:
>> Hello,
>>
>> I'm experiencing odd errors on both windows and linux with the following
>> code:
>>
>> import sys
>> from PyQt4.QtCore import *
>> from PyQt4.QtGui import *
>>
>> class Options(QDialog):
>> def __init__(self, values):
>> QDialog.__init__(self)
>>
>> self.values = values
>>
>> fooEdit = QLineEdit(values['foo'])
>> self.connect(fooEdit, SIGNAL('textChanged(QString)'),
>> lambda value: self.optionChanged('foo', value))
>>
>> barEdit = QLineEdit(values['bar'])
>> self.connect(barEdit, SIGNAL('textChanged(QString)'),
>> lambda value: self.optionChanged('bar', value))
>>
>> layout = QVBoxLayout()
>> layout.addWidget(fooEdit)
>> layout.addWidget(barEdit)
>>
>> self.setLayout(layout)
>>
>> def optionChanged(self, option, value):
>> self.values[option] = value
>> print self.values
>>
>> def main(args):
>> app = QApplication(args)
>> values = dict(foo='', bar='')
>> dialog = Options(values)
>> dialog.show()
>> app.exec_()
>>
>> if __name__ == '__main__':
>> main(sys.argv)
>>
>>
>> If I type a character in fooEdit, another character in barEdit, and then
>> delete the character from barEdit I get an unhandled win32 exception
>> occured
>> in python.exe on windows and segfault on linux.
>>
>> If I type a character in fooEdit, delete it, and then type a character in
>
>> barEdit I get:
>>
>> {'foo': PyQt4.QtCore.QString(u'a'), 'bar': ''}
>> {'foo': PyQt4.QtCore.QString(u''), 'bar': ''}
>> {'foo': Traceback (most recent call last):
>> File "L:\home\dev\python\test.py", line 17, in <lambda>
>> lambda value: self.optionChanged('bar', value))
>> File "L:\home\dev\python\test.py", line 27, in optionChanged
>> print self.values
>> MemoryError
>>
>> I'm using Python 2.5.4 and PyQt 4.4.3-1
>>
>> Thanks in advance for any help.
>
> Works fine for me with current versions.
>
> Phil
I have noticed that if I do "self.values[option] = QString(value)"
instead of "self.values[option] = value" in optionChanged I don't get any
errors.
Is it perhaps not safe to keep the reference to the lambda QString argument?
More information about the Python-list
mailing list