[PyQt] Segfaults on MacOS
Michael Held
michael.held at bc.biol.ethz.ch
Sun Jun 28 22:42:21 BST 2009
hi,
I am building an image viewer with PyQt and wanted to display the pixel
color under the cursor for mouseMoveEvent - everything fine so far.
using the eventFilter I was able circumvent QLabel sub-classing.
*BUT* printing the pixel value crashes my program with a seg fault (I am
just moving a bit over the image and BANG...)
my silly attempt to delay the event-response with time.sleep(0.5) did
also not work.
I was using Stackless Python 2.6.2 before but the same error happened
for the normal Python 2.6.2
MacOS 10.5.7
PyQt-mac-gpl-4.5.2-snapshot-20090627
sip-4.8.1
thanks a lot!
michael
class ImageViewer(QScrollArea):
def __init__(self, parent):
super(ImageViewer, self).__init__(parent)
self.setBackgroundRole(QPalette.Dark)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.label = QLabel(self)
self.label.setBackgroundRole(QPalette.Base)
self.setAlignment(Qt.AlignHCenter|Qt.AlignVCenter)
self.label.installEventFilter(self)
self.label.show()
self.label.setMouseTracking(True)
self.setWidget(self.label)
self._qimage = None
self.connect(self, SIGNAL('MouseMovedOverImage'),
self._on_move)
def from_numpy(self, data):
self._qimage = numpy_to_qimage(data)
self._update()
def from_qimage(self, qimage):
self._qimage = qimage
self._update()
def _on_move(self, pos):
print pos, self._qimage.pixel(pos)
time.sleep(0.5)
def eventFilter(self, obj, ev):
if ev.type() == QEvent.MouseMove and obj == self.label:
self.emit(SIGNAL('MouseMovedOverImage'),
ev.pos())
return True
else:
return False
def _update(self):
self.label.setPixmap(QPixmap.fromImage(self._qimage))
self.label.resize(self.label.pixmap().size())
More information about the PyQt
mailing list