2013-02-28 101 views
0

我正在使用QtDesign創建自己的UI並將其轉換爲python版本。所以在子類UI python文件之後,我寫了一些函數來實現QGraphicsView的mouseEvent。只是一個小問題。我怎樣才能調用QGraphicsView的super()函數?關於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)將返回的MouseEvent爲QMainWindow的,不是的QGraphicsView。所以像rubberBand這樣的鼠標所有其他選項都會丟失。

謝謝

+0

你的問題不清楚。什麼是'self.GraphicsView'?一個'QGraphicsView'實例?因爲通過您對Eevee的回答的評論,*絕對不是'QGraphicsView'的實例。 – Bakuriu 2013-02-28 14:18:07

回答

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的班級層次:)

+0

類型錯誤:超(類型,OBJ):OBJ必須是實例或類型 的亞型這是我不得不嘗試 '超(QtGui.QGraphicsView,self.GraphicsView).mousePressEvent(事件)' 但儘管如此,它不工作.... Btw,self.GraphicsView是我在QtDesign中創建的QGraphicsView對象的名稱,並感謝您給我的鏈接:D – illunara 2013-02-28 09:30:05

+0

是否使用'reload()'或其他有趣的模塊加載花樣?那些可以搞砸'super()'。 – Eevee 2013-02-28 20:26:02