Масштабирование сетки в pyqtgraph с использованием GLGridItem и GLViewWidget

Вопрос довольно специфический и касается pyqtgraph. Мне необходимо реализовать масштабирование координатной сетки GLGridItem. Т.е. чтобы при движении колёсика мыши изменялась частота линий сетки (при приближении — частота увеличивала, при отдалении — уменьшалась). Для этого я написала класс, который наследуется одновременно от GLGridItem и GLViewWidget, т.к. GLGridItem не имеет функции события для нажатия клавиш, а в GLViewWidget есть функция wheelEvent.

Однако при запуске кода выдаётся ошибка Process finished with exit code -1073741819 (0xC0000005), т.е. null pointer exeption. При дебаге я поняла, что когда вызывается функция gl.GLGridItem.__init__(self), класс GLGridItem вызывает GLGraphicsItem.__init__. И как раз в этот момент программа падает.

В классе GLGridItem в __init__ нет параметра родителя parentItem, а в классе GLGraphicsItem он есть. И т.к. значение родителя по умолчанию None и оно не изменяется, то программа падает. Т.е. null pointer как раз этот родитель.

Прошу помочь исправить данный баг.

class MyGLGridItem(gl.GLGridItem, gl.GLViewWidget):
    def __init__(self, parent = None):
        gl.GLGridItem.__init__(self)
        gl.GLViewWidget.__init__(self, parent=parent)
        self.setGLOptions('translucent')
        self.setColor("lightslategray")
        self.__spacing = [1, 1, 1]
        self.setSpacing(self.__spacing)
        self.scale_iterator = 0

    def wheelEvent(self, ev):
        delta = ev.angleDelta().x()
        if delta == 0:
            delta = ev.angleDelta().y()
        if ev.modifiers() & QtCore.Qt.KeyboardModifier.ControlModifier:
            self.opts['fov'] *= 0.999 ** delta
        else:
            if delta > 0:
                self.scale_iterator += 1
            else:
                self.scale_iterator -= 1
            self.opts['distance'] *= 0.999 ** delta

            if self.scale_iterator == 5:
                self.doubleUpSpacing(self.__spacing)
                self.scale_iterator = 0
            elif self.scale_iterator == -5:
                self.doubleDownSpacing(self.__spacing)
                self.scale_iterator = 0

        self.update()

    def doubleUpSpacing(self, x=None, y=None, z=None, spacing=None):
        if spacing is not None:
            x = spacing.x() * 2
            y = spacing.y() * 2
            z = spacing.z() * 2
        self.__spacing = [x, y, z]
        self.update()

    def doubleDownSpacing(self, x=None, y=None, z=None, spacing=None):
        if spacing is not None:
            x = spacing.x() // 2
            y = spacing.y() // 2
            z = spacing.z() // 2
        self.__spacing = [x, y, z]
        self.update()

Ответы (0 шт):