【问题标题】:pyQt Hover event with Svg image带有 Svg 图像的 pyQt 悬停事件
【发布时间】:2011-11-04 01:42:38
【问题描述】:

我已经为此工作了一段时间,但我无法弄清楚我做错了什么。我希望这里有人可以提供帮助。

当我将鼠标悬停在 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()

希望有人能提供帮助。

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

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

    #!/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()
    

    【讨论】:

    • 非常感谢这个。这解决了更多问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2020-09-14
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2018-07-11
    • 2020-07-13
    相关资源
    最近更新 更多