2013-05-17 6 views
4

Я строю проект PyQt QGraphicsView, где некоторые QGraphicItems могут перемещаться между различными QGraphicsItemGroups. Для этого я использую метод addItemToGroup() для «новой» родительской группы элементов.Невозможно добавить элемент в itemgroups, если itemchange() определен (PyQt)

Это работает нормально, но только до тех пор, пока я не определяю метод itemChange() в своем классе дочерних элементов. Как только я определяю этот метод (даже если я просто передаю вызов функции суперклассу), childItems не будут добавлены в ItemGroups независимо от того, что я пробую.

class MyChildItem(QtGui.QGraphicsItemGroup): 
    def itemChange(self, change, value): 
     # TODO: Do something for certain cases of ItemPositionChange 
     return QtGui.QGraphicsItemGroup.itemChange(self, change, value) 
     #return super().itemChange(change, value) # Tried this variation too 
     #return value # Tried this too, should work according to QT doc 

Am Я просто слишком глуп для правильного вызова метода суперкласса в Python, или проблема где-то в магии QT/PyQt?

Я использую Python 3.3 с PyQt 4.8 и QT 5.

ответ

2

Я имел точно такую ​​же проблему. Может быть, это: http://www.mail-archive.com/[email protected]/msg27457.html отвечает на некоторые из ваших вопросов? Похоже, нам может быть не повезло в PyQt4.

Update: На самом деле, только что нашел обходной путь:

import sip 

def itemChange(self, change, value): 
     # do stuff here... 
     result = super(TestItem, self).itemChange(change, value) 
     if isinstance(result, QtGui.QGraphicsItem): 
      result = sip.cast(result, QtGui.QGraphicsItem) 
     return result 

взято отсюда: http://www.mail-archive.com/[email protected]/msg26190.html

Может быть не самый элегантный и общее решение, но здесь, это работает - я возможность снова добавить QGraphicItems в QGraphicItemGroups.

+0

Hi Henry, Большое спасибо за ваш ответ и ваши усилия. К сожалению, полезные почтовые рассылки были опубликованы с августа 2013 года, когда мои PyQT уже были завершены (используя уродливые обходные пути, чтобы вообще избежать проблемной ситуации). В любом случае, я попытаюсь снова запустить старый материал, чтобы проверить, помогло ли ваше решение ... :-) Еще раз спасибо за обмен! –