Благодаря вашим комментариям alexisdm и varela, я нашел проблему.
Я делал что-то вроде этого:
class Synoptique:
def __init__(self, w, h):
self.view = QGraphicsView()
self.scene = SynopScene()
# some initialization ...
def openSynop(buApp, fname, w, h):
synop = Synoptique(w, h)
var_export = {
'addItem': synop.addItem,
'addCallback': buApp.addCallback,
}
exec open(fname) in var_export
synop.view.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
# buApp creation
openSynop(buApp, 'synop.py', 800, 600)
app.exec_()
Но похоже, что ссылка на объект synop (содержащий QGraphicsView и Scene) потеряна, потому что это локальная переменная в функции openSynop. Так что ссылки на QGraphicsView, scene и объекты в сцене тоже потеряны.
Один из способов справиться с этим - объявить экземпляр synop вне функции, в основном вызове или вернуть и сохранить ссылку на synop из функции. Это решило мою проблему, например:
def openSynop(buApp, fname, w, h):
# same as before...
return synop
if __name__ == '__main__':
# same as before...
s = openSynop(buApp, 'synop.py', 800, 600)
app.exec_()
Теперь я понимаю, что мне нужно сохранить ссылку на QGraphicsView / scene, чтобы позже манипулировать QGraphicsItem, который находится внутри сцены ... Вау, это было не очевидно для меня, спасибо еще раз!