0

我正在使用 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。因此,像橡皮筋这样的鼠标的所有其他选项都将丢失。

谢谢

4

1 回答 1

0

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

super的祖先RigModuleUi不继承自QGraphicsView.

self.GraphicsView是一个实例属性的有趣名称;那应该是一个类的名称,还是只是偶然大写?(请遵循PEP8 命名约定。)如果您将方法定义为全局函数并将其分配给实例那么您可能会更幸运。

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 的类层次结构 :)

于 2013-02-28T09:11:54.697 回答