PySide metro风格的鼠标按压事件



我正在尝试一个具有metro(Windows 8)风格的python桌面应用程序,因此可以单击一个矩形表来做一些事情。

我生成矩形表(MyIcon)如下:

for sub_rectx in xrange(4):
    for sub_recty in xrange(3):
        tmp = MyIcon(sub_rectx*322, sub_recty*192, 300, 170, sub_recty+3*sub_rectx + 1, parent=parent)

我有我的课,基本上是一个id为的矩形

class MyIcon(MyPanel):
    def __init__(self, x, y, width, height, ide, parent=None):
        super(MyPanel, self).__init__(parent)
        QtGui.QGraphicsRectItem.__init__(self, x, y, width, height, parent)
        self.ide = ide
    def mousePressEvent(self, event):
        self.setBrush(QtGui.QColor(255, 255, 255))
        print self.ide

当我第一次点击一个矩形,打印正确的id,并更改正确矩形的颜色时,这个代码工作得很好,但下次我点击任何矩形时,它总是打印我点击的第一个矩形的id,并且颜色没有更改(我认为是因为它也在再次绘制相同的矩形)。

有人能帮我吗?

我看到两个问题:

1) 当您调用super(..)时,必须将当前类作为第一个参数(MyIcon而不是MyPanel)传递。传递适当的参数,不要在那里调用QGraphicsRectItem的init函数(您的父类可能会这样做)。

2) 在鼠标事件处理程序中,您也应该调用超级函数:

super(MyIcon, self).mousePressEvent(event)

这应该能解决问题。

最新更新