[PyQt] Hover Event for a QGraphicsItem

Elvis Stansvik elvstone at gmail.com
Sat May 7 21:08:53 BST 2016


Hi Nesibe,

2016-05-07 19:46 GMT+02:00 sw33tz <nyavuz.nm20 at gmail.com>:
> I want some small text to pop up when I have my curser over a QGraphicsItem
> in my QGraphicsScene. I have a class that inherits from QGraphicsItem, and
> this represents my graphical items in the scene.
>
> I tried using the QGraphicsItem.hoverEnterEvent and I also set the
> setAcceptHoverEvents(True), but I still can't enable that hover event. I
> also came across an event filter method but I'm not sure where to implement
> it.

This seems to work here:


test.py:

from sys import argv, exit

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QGraphicsEllipseItem
from PyQt5.QtWidgets import QGraphicsScene
from PyQt5.QtWidgets import QGraphicsView
from PyQt5.QtWidgets import QMainWindow


class MyItem(QGraphicsEllipseItem):

    def __init__(self, parent=None):
        super(MyItem, self).__init__(parent)

        self.setRect(50, 50, 50, 50)
        self.setBrush(Qt.red)
        self.setAcceptHoverEvents(True)

    def hoverEnterEvent(self, event):
        print('hover enter')

    def hoverLeaveEvent(self, event):
        print('hover leave')


app = None


def main():
    global app

    app = QApplication(argv)

    scene = QGraphicsScene()
    scene.addItem(MyItem())

    view = QGraphicsView()
    view.setScene(scene)

    window = QMainWindow()
    window.setCentralWidget(view)
    window.show()

    exit(app.exec_())


if __name__ == '__main__':
    main()


Hope that helps.

Best regards,
Elvis

>
> Should I install the event filter in the QGraphicsItem class, or the scene?
> I tried both and I'm still not getting the desired result. I want to be able
> to hover over all the items in the scene.
>
>
> class HoverEventFilter(QtCore.QObject):
>     def eventFilter(self, receiver, event):
>         if (event.type() == QtCore.QEvent.HoverEnter):
>             # this is for test purposes
>             print 'hover event'
>             return True
>         else:
>             # Call Base Class Method to Continue Normal Event Processing
>             return super(HoverEventFilter, self).eventFilter(receiver,
> event)
>
>
>
> --
> View this message in context: http://python.6.x6.nabble.com/Hover-Event-for-a-QGraphicsItem-tp5190283.html
> Sent from the PyQt mailing list archive at Nabble.com.
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> https://www.riverbankcomputing.com/mailman/listinfo/pyqt


More information about the PyQt mailing list