Pyqtgraph, помогите понять исходный код

Я хотел бы понять некоторые части библиотеки "PyQtGraph", особенно когда речь идет о 2D-графике.

В исходном коде два файла python следующие: PlotDataItem.py и PlotCurveItem.py (они расположены в pyqtgraph/graphicsItems/). Но в этих двух файлах я не вижу никакой функции для построения графика. Я имею в виду, что у нас есть только методы для сохранения данных x и y (self.yData и self.xData). Где методы, строго говоря, отображать данные? (Эквивалентно draw() в matplotlib.)

РЕДАКТИРОВАТЬ: Спасибо за ваш ответ. Я читаю исходный код и да, я обнаружил, что в ViewBox.addItem что-то есть. На самом деле, я попытался удалить некоторые части кода, чтобы посмотреть, исчезла ли кривая. Строки: scene.addItem(item) и item.setParentItem(self.childGroup) кажутся важными. В любом случае, вы имеете в виду, что я должен сосредоточиться на QGraphicsScene и QGraphicsView? Не могли бы вы подтвердить мне, что PlotDataItem - это просто файл, в котором данные x и y «сохраняются», а «графика» нет?


person Stan Grare    schedule 25.08.2017    source источник


Ответы (1)


Короткий ответ заключается в том, что PyQtGraph делегирует отрисовку Qt Graphics View Framework. PyQtGraph создаст QGraphicsScene и добавит QGraphicsItems к этой сцене. Если вы соедините объект QGraphicsView с этой сценой, Qt отобразит сцену с преобразованиями (масштабированием, вращением и т. д.) этого вида для вас.

Итак, PlotCurveItem и PlotDataItem являются потомками QGraphicsItem. Вы можете узнать, к какой сцене они относятся, вызвав их метод scene(). Мне потребовалось немного усилий, чтобы найти, где PyQtGraph добавляет элемент на сцену. Это делается в ViewBox.addItem, который вызывается PlotItem.addItem, который, в свою очередь, вызывается PlotWidget.addItem.

Раздел Организация занятий по черчению является обязательным. прочитайте, если хотите понять PyQtGraph. Тем не менее, иерархия классов PyQtGraph иногда может сбивать с толку из-за множественного наследования и несоответствия имен (термины item и widget перегружены, и согласованное соглашение об именах, вероятно, привело бы к длинным и громоздкие имена). Я сделал UML-диаграмму в прошлом, чтобы получить лучший обзор (см. ниже). Синие классы определяются PyQtGraph, черные классы — это классы Qt. Он неполный, включены не все классы PyQtGraph.

введите здесь описание изображения

person titusjan    schedule 29.08.2017