Я рекомендую вам выполнить свой код в CMD или терминале, чтобы вы могли получить больше информации об ошибке, если вы это сделаете, вы получите следующее сообщение:
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/pyqtgraph/graphicsItems/GraphicsObject.py", line 23, in itemChange
self.parentChanged()
File "/usr/lib/python3.7/site-packages/pyqtgraph/graphicsItems/ScaleBar.py", line 44, in parentChanged
view.sigRangeChanged.connect(self.updateBar)
AttributeError: 'ImageItem' object has no attribute 'sigRangeChanged'
Aborted (core dumped)
И эта ошибка вызвана тем, что *Для метода 1004 * требуется ViewBox, поскольку он имеет сигнал sigRangeChanged, который позволяет обновлять ScaleBar, если есть какой-либо тип масштабирования.Затем вы можете получить ViewBox через атрибут view, но если вы передадите параметр в конструкторе, используя view, как вы это сделали (pg.ImageView(view = pg.PlotItem())
), то вы должны получить viewbox через этот объект, используя getViewBox()
.
Другая ошибка в вашем коде состоит в том, что QApplication принадлежит подмодулю QtWidgets PyQt5.
from PyQt5 import QtWidgets
import pyqtgraph as pg
import numpy as np
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
imvOCTTopLeft = pg.ImageView(view=pg.PlotItem())
imvOCTTopLeft.setImage(np.random.normal(size=(100,100)))
scale = pg.ScaleBar(size=10)
viewbox = imvOCTTopLeft.view
if not isinstance(viewbox, pg.ViewBox): viewbox = viewbox.getViewBox()
scale.setParentItem(viewbox)
scale.anchor((1, 1), (1, 1), offset=(-200, -20))
imvOCTTopLeft.show()
sys.exit(app.exec_())