fereria
2/2/2019 - 3:16 AM

hover_pyside.py

#!python2
# -*- coding: utf-8 -*-

import sys
from PySide import QtCore, QtGui


class testWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):

        super(testWindow, self).__init__(parent)

        self.scene = Scene(QtCore.QRect(0, 0, 640, 480))
        self.scene.addRect(0, 0, 640, 480, QtGui.QPen(QtCore.Qt.black), QtGui.QBrush(QtCore.Qt.white))
        self.view  = QtGui.QGraphicsView(self.scene)
        self.view.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.gray))

        # itemを配置
        item = TestItem(QtCore.QRect(0, 0, 100, 100))
        self.scene.addItem(item)
        child = TestItem(QtCore.QRect(150, 0, 100, 100))
        self.scene.addItem(child)
        child.setParentItem(item)

        self.setCentralWidget(self.view)
        self.setGeometry(100, 100, 700, 500)


class Scene(QtGui.QGraphicsScene):

    mouse_pos = None
    sel_item  = None

    def __init__(self, *args, **kwargs):

        super(Scene, self).__init__(*args, **kwargs)


class TestItem(QtGui.QGraphicsItem):

    rect = None
    color = QtGui.QColor('pink')

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

        self.__rect = rect
        self.setAcceptHoverEvents(True)

    def boundingRect(self):

        return self.__rect

    def paint(self, painter, option, widget):

        painter.setBrush(self.color)
        painter.drawRoundedRect(self.__rect, 5, 5)

    def hoverEnterEvent(self, e):

        if self.isUnderMouse():
            self.color = QtGui.QColor('yellow')
            self.update()

    def hoverLeaveEvent(self, e):

        self.color = QtGui.QColor('pink')
        self.update()

    def changeRect(self, rect):

        self.__rect = rect
        self.update()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    a = testWindow()
    a.show()
    sys.exit(app.exec_())