[PyKDE] strange bug in PyQt or python?

Gerard Vermeulen gvermeul at labs.polycnrs-gre.fr
Sat Jul 7 14:53:32 BST 2001


Hi,

The following 30-line program (python-2.1, PyQt/sip-2.5pre1, Qt-2.2.1)
shows a bug, that goes away if I comment out line 14 and
uncomment line 15 

--
#!/usr/bin/env python

import sys
from qt import *

class Item(QListViewItem):
    def __init__(self, parent, value):
        QListViewItem.__init__(self, parent)
        self.value = value

    def text(self, column):
        if column == 0:
            print self.value[0]
            return "%4d: %5d %8.2f %8.2f" % self.value[0] # this fails
            #return "%4d: %5d %s %s" % self.value[0] # this works
        elif column == 1: return "[%5d, %5d)" % self.value[1]
        else: return ""

list = [((1, 520, 3.14, 2.72), (13, 17)), ((2, 520, 2.72, 3.14), (37, 43))]
for item in list:
    print "%4d: %5d %8.2f %8.2f" % item[0]

app = QApplication(sys.argv)
listView = QListView()
app.setMainWidget(listView)
listView.setCaption('Pourquoi?')
listView.addColumn('Settings')
listView.addColumn('Zoom')
for item in list:
    Item(listView, item)
listView.show()
app.exec_loop()
--
It crashes with
--
[packer at taco python]$ python bug.py
   1:   520     3.14     2.72
   2:   520     2.72     3.14
(2, 520, 2.7200000000000002, 3.1400000000000001)
(1, 520, 3.1400000000000001, 2.7200000000000002)
(2, 520, 2.7200000000000002, 3.1400000000000001)
(1, 520, 3.1400000000000001, 2.7200000000000002)
(1, 520, 3.1400000000000001, 2.7200000000000002)
(1, 520, 3.1400000000000001, 2.7200000000000002)
(1, 520, 3.1400000000000001, 2.7200000000000002)
Traceback (most recent call last):
  File "bug.py", line 14, in text
    return "%4d: %5d %8.2f %8.2f" % self.value[0] # this fails
AttributeError: sipThis
Segmentation fault
[packer at taco python]$ 
--

Of course, later, I realized that the (b)right way to do this
is to write something like:
     def __init__(self, parent, value):
        QListViewItem.__init__(self, parent,
	"format0" % value[0],  "format1" % value[1])
        self.value = value

and not to redefine:
     def text(self, column)


but why does line 14 crash after being executed successfully
7 times?

Gerard 




More information about the PyQt mailing list