关于super()函数

时间:2013-02-28 08:58:20

标签: python pyqt maya

我正在使用QtDesign创建自己的UI并将其转换为python版本。因此,在子类的UI python文件之后,我编写了一些函数来为QGraphicsView实现mouseEvent。只是一个小问题。如何调用QGraphicsView的super()函数?

class RigModuleUi(QtGui.QMainWindow,Ui_RiggingModuleUI):
    def __init__(self,parent = None):
        super(RigModuleUi,self).__init__(parent = parent)
    self.GraphicsView.mousePressEvent = self.qView_mousePressEvent

    def qView_mousePressEvent(self,event):
        if event.button() == QtCore.Qt.LeftButton:
            super(RigModuleUi,self).mousePressEvent(event)

看起来super(RigModuleUi,self).mousePressEvent(event)将返回QMainWindow的mouseEvent,而不是QGraphicsView。所以像rubberBand这样的鼠标的所有其他选项都将丢失。

由于

1 个答案:

答案 0 :(得分:0)

我不太清楚你期望在这里发生什么。您正在存储绑定方法。当它被调用时,它仍然会被存储它时使用的self调用。

您的super正在走向RigModuleUi的祖先,该祖先不会继承QGraphicsView

self.GraphicsView是实例属性的有趣名称;是应该是一个类的名称,还是只是偶然资本化? (请关注PEP8 naming conventions。)如果您将方法定义为全局函数并将 分配给实例,也许您会有更多的运气。

def qView_mousePressEvent(self, event):
    if event.button() == QtCore.Qt.LeftButton:
        super(QGraphicsView, self).mousePressEvent(event)

class RigModuleUi(QtGui.QMainWindow, Ui_RiggingModuleUI):
    def __init__(self, parent=None):
        super(RigModuleUi,self).__init__(parent=parent)
        self.GraphicsView.mousePressEvent = qView_mousePressEvent

在这里疯狂地猜测;我不知道PyQt的类层次结构:)