2013-02-28 2 views
0

Я использую QtDesign для создания собственного пользовательского интерфейса и преобразования его в версию python. Поэтому после подкласса файла UI python я написал некоторую функцию для реализации mouseEvent для QGraphicsView. Только один маленький вопрос. Как я могу назвать функцию super() для 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) возвратит MouseEvent для QMainWindow, не QGraphicsView. Таким образом, все остальные опции для мыши, такие как rubberBand, будут потеряны.

Thanks

+0

Ваш вопрос непонятен. Что такое 'self.GraphicsView'? Экземпляр 'QGraphicsView'? Потому что ваш комментарий к ответу Eevee однозначно * не является экземпляром 'QGraphicsView'. – Bakuriu

ответ

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

TypeError: супер (тип, объект): объекты должны быть экземпляром или подтип типа Это то, что я имел попробовать 'супер (QtGui.QGraphicsView, self.GraphicsView) .mousePressEvent (событие)' Но все-таки, его не работает .... Btw, self.GraphicsView - это имя объекта QGraphicsView, который я создал в QtDesign, и спасибо за ссылку, которую вы мне дали: D – illunara

+0

вы используете 'reload()' или другую забавную загрузку модуля трюки? те могут испортить 'super()'. – Eevee