LINUX.ORG.RU

Опять QGraphicsView

 ,


0

1

С момента предыдущего моего треда понял, что найденное решение, кхм, не очень. Решил сделать еще раз, строго по примерам и манам. Наткнулся на странный момент.

Модуль main подключает класс BPlot(QGraphicsView). Выполняется следующая фигня

self.graph = BPlot()

В BPlot вызывается __init__, resizeEvent и showEvent.

def __init__(self, parent=None):
    super(BPlot, self).__init__(parent)
    self.L = 25
    ... - пачка констант
    self.scene = QGraphicsScene()
    self.setScene(self.scene)

def showEvent(self, event):
    super(BPlot, self).showEvent(event)
    vw = self.viewport().width
    hw = self.viewport().height
    self.scene.setSceneRect(0,0,vw,vh)
    self.populate(vw, vh)

def populate(self, vw, vh):
    self.axis = QGraphicsLineItem()
    self.axis.setLine(0,0,vw+10,vh+20)
    self.scene.addItem(self.axis)
    ... - тут идет еще пачка Item'ов

def resizeEvent(self, event):
    vw = self.viewport().width
    hw = self.viewport().height
    self.axis.setLine(0,0,vw+10,vh+20)
    ... - обновление остальных Item'ов

def setL(self):
    self.L = 35
    vw = 25
    hw = 45
    self.axis.setLine(0,0,vw+10,vh+20) - там не так, просто пример

Фигня в следующем. Я могу вызвать self.scene.items() чтобы получить список Item'ов. При вызове из первыз четырех функций все отлично. Но если я вызываю его из BPlot или просто из функции-не_Event'а вроде setL() - то он выдает пустой массив. Также он нормально обрабатывает boundingRect() в этих функциях и выдает пустоту в других. Причем обычные значения переменных (например self.L) он обрабатывает нормально откуда бы я его не вызывал (и из main, и из BPlot)

Возможно я делаю неправильно, создавая scene сразу внутри BPlot, сейчас пытаюсь создать его в main и передать в BPlot оттуда

ЧЯНТД?

upd: Наткнулся похоже на основной косяк - если вызвать в main

print(self.graph.scene)
или в BPlot _вне_ первых эвентов
print(self.scene)
он ссылается на один адрес в памяти. А если вызвать принт внутри эвента - он идет на другой адрес О_о WTF???

★★★★★

черт, я идиот. за почти неделю так и не допер, что надо в main задавать класс через интерфейс, а не через модуль.

типа

self.graph = self.ui.bplot

upcFrost ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.