python - 带有 Svg 图像的 pyQt 悬停事件

标签 python pyqt

我已经为此工作了一段时间,但我不知道自己做错了什么。我希望这里有人可以提供帮助。

当我将鼠标悬停在 QGraphicsScene 中的 Svg 项目上时,我试图让悬停事件起作用。这是我一直在玩的代码。

#!/usr/bin/python

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtSvg import *

class Main(QWidget):

    def __init__(self):
        super(Main, self).__init__()

        hbox = QHBoxLayout()

        self.setLayout(hbox)
        self.view = MyView(self)
        self.scene = QGraphicsScene()
        self.view.setScene(self.scene)

        hbox.addWidget(self.view)


class MyView(QGraphicsView):

    def __init__(self, parent):
        super(MyView, self).__init__(parent)
        self.parent = parent

    def mousePressEvent(self, event):
        super(MyView, self).mousePressEvent(event)
        test = MySvg()
        self.parent.scene.addItem(test.image)


class MySvg(QGraphicsSvgItem):

    def __init__(self):
        super(MySvg, self).__init__()

        self.image = QGraphicsSvgItem('ubuntu.svg')
        self.image.setFlags(QGraphicsItem.ItemIsSelectable|
                            QGraphicsItem.ItemIsMovable)

        self.setAcceptsHoverEvents(True)

    def hoverEnterEvent(self, event):
        print 'Enter'

    def hoverLeaveEvent(self, event):
        print 'Leave'

    def hoverMoveEvent(self, event):
        print 'Moving'


def runMain():

    app = QApplication(sys.argv)
    ex = Main()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    runMain()

希望有人能帮忙。

最佳答案

您正在监视 MySvg 的悬停事件,但您正在将另一个 QGraphicsSvgItem 添加到只是一个实例的 View (MySvg.image)在 MySvg 中。您的 MySvg 甚至不在 View 中。像这样尝试:

#!/usr/bin/python

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtSvg import *

class Main(QWidget):

    def __init__(self):
        super(Main, self).__init__()

        hbox = QHBoxLayout()

        self.setLayout(hbox)
        self.view = MyView(self)
        self.scene = QGraphicsScene()
        self.view.setScene(self.scene)

        hbox.addWidget(self.view)


class MyView(QGraphicsView):

    def __init__(self, parent):
        super(MyView, self).__init__(parent)
        self.parent = parent

    def mousePressEvent(self, event):
        super(MyView, self).mousePressEvent(event)
        test = MySvg()
        self.parent.scene.addItem(test)


class MySvg(QGraphicsSvgItem):

    def __init__(self):
        super(MySvg, self).__init__('ubuntu.svg')

        self.setFlags(QGraphicsItem.ItemIsSelectable|
                      QGraphicsItem.ItemIsMovable)

        self.setAcceptsHoverEvents(True)

    def hoverEnterEvent(self, event):
        print 'Enter'

    def hoverLeaveEvent(self, event):
        print 'Leave'

    def hoverMoveEvent(self, event):
        print 'Moving'


def runMain():

    app = QApplication(sys.argv)
    ex = Main()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    runMain()

关于python - 带有 Svg 图像的 pyQt 悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004037/

相关文章:

python - Numpy:二维数组,删除奇数索引并保持相同的数组格式

python - 如何在Python中的字典中拥有两个键和一个值

python - 简单的二十一点游戏 : deck list becomes NoneType

python - 使用 QT 运行 pytest 时出现致命的 Python 错误

python - 访问动态添加的小部件(pyqt)

python - pyqt 将枚举值转换为键

python - 插槽触发自己的信号

python - MobileNet ValueError : Error when checking target: expected dense_1 to have 4 dimensions, 但获得形状为 (24, 2) 的数组

python - 如何将 groupby() 和 value_counts() 变成多个饼图/条形图

qt - 如何在 QWebView/QWebPage 中实现 "back" Action