Фильтр событий при наведении курсора на метку PyQT - PullRequest
4 голосов
/ 04 октября 2010

Я пытался преобразовать пример здесь для работы с простой меткой.

Вот код:

class mouseoverEvent(QtCore.QObject):
    def __init__(self, parent):
        super(mouseoverEvent, self).__init__(parent)
    def eventFilter(self, object, event):
        if event.type() == QtCore.QEvent.MouseMove:
            print "mousemove!"

self.filter = mouseoverEvent(self)
self.label.installEventFilter(self.filter)

Теперь, что любопытно, это действительно работает, но не без того, что моя консоль спамится "mousemove!"(хорошо), а также ошибка: TypeError: недопустимый тип результата от mouseoverEvent.eventFilter ()

Я еще не совсем понял сложные отношения между событиями, так чтонемного греческий для меня.Итак, что дает?

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 04 октября 2010

Полагаю, вам нужно вернуть True или False из eventFilter, чтобы указать, полностью ли вы обработали событие.

0 голосов
/ 08 октября 2010

Проверьте, что я только что обнаружил.Это фрагмент из какого-то фактического кода, поэтому имена классов в моем случае специфичны.

    def mouseMoveEvent(self, event=None):
        if self.activeLayer.layerName != 'Whiteboard': super(MapPage, self).mouseMoveEvent(event)
        else:
            if (event.buttons() & Qt.LeftButton) and self.scribbling:
                self.drawLineTo(event.scenePos())

Я повторно объявил mouseMoveEvent, но если запущенный экземпляр activeLayer не назван «Whiteboard», тогда программа запускается через «оригинальный» mouseMoveEvent.

...