0

我正在尝试使用 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 和颜色没有改变(我假设是因为它也再次绘制了相同的矩形)。

谁能帮我?

4

1 回答 1

0

我看到两个问题:

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

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

super(MyIcon, self).mousePressEvent(event)

这应该可以解决问题。

于 2013-08-20T15:53:48.700 回答