'''
Two items to be added to QGraphicsItemGroup: text1 and item.
Expectation: self.group.childItems() should return a list with 2 items.

Problem in PySide6 version 6.2.4: when itemChange() is overridden in class Item,
the item is not in the group's childItems list
'''

import sys
from PySide6.QtCore import QLibraryInfo, qVersion
from PySide6.QtWidgets import QApplication
from PySide6.QtWidgets import QGraphicsScene, QGraphicsView, QGraphicsItemGroup, QGraphicsTextItem, QGraphicsItem, QMainWindow
from PySide6.QtCore import QRectF


class Item(QGraphicsItem):
    def __init__(self, parent=None):
        print(">Item.__init__(", parent, ')')
        super().__init__(parent=parent)
        print("<Item.__init__()")

    def __del__(self):
        print("Item.__del__")

    def boundingRect(self):
        return QRectF(10, 10, 10, 10)

    def paint(self, painter, option, widget):
        print("Item.paint()")
        painter.drawEllipse(-7, -7, 20, 20)

    def itemChange(self, change, v):
        print(">Item.itemChange() chg=", change, "\n   v=", v)
        r = super().itemChange(change, v)
        print("<Item.itemChange() rets ", r)
        return r


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.view = QGraphicsView(self)
        self.scene = QGraphicsScene(self.view)
        self.view.setScene(self.scene)
        self.setCentralWidget(self.view)
        self.group = QGraphicsItemGroup()
        text1 = QGraphicsTextItem()
        item = Item()
        item.setPos(200, 0)

        self.group.addToGroup(text1)
        self.group.addToGroup(item)

        self.scene.addItem(self.group)
        child_items = self.group.childItems()
        t = f"children number:{len(child_items)}  \n{child_items}"
        print("\n__init__:", t)
        text1.setPlainText(t)
        self.group.removeFromGroup(text1)
        self.group.removeFromGroup(item)


if __name__ == '__main__':
    print('Python {}.{}'.format(sys.version_info[0], sys.version_info[1]))
    print(QLibraryInfo.build())
    app = QApplication(sys.argv)
    window = MainWindow()
    window.setWindowTitle(qVersion())
    window.show()
    sys.exit(app.exec())
