我正在尝试一个具有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)
这应该能解决问题。