Некорректное отображение графика в оконном режиме
Есть график, построенный с помощью PlotWidget. На график были добавлена возможность отслеживания мышки и отображение координат:

Однако, если приложение используется в малом окне (не на весь экран), то график начинает уменьшаться на несколько порядков.
Код графика следующий:
self.plotx = range(181)
self.ploty = [number**2 for number in self.plotx]
styles = {'color': 'r', 'font-size': '12px'}
pen = QtGui.QPen(QtCore.Qt.black, 0.05, QtCore.Qt.SolidLine)
self.ui.graphicsView.scene().sigMouseMoved.connect(self.mouseMoved)
self.vLine = InfiniteLine(angle=90, movable=False)
self.hLine = InfiniteLine(angle=0, movable=False)
self.cursorlabel = TextItem(anchor=(-1, 10))
#pen2 = QtGui.QPen(QtCore.Qt.red, 0.1, QtCore.Qt.SolidLine)
self.ui.graphicsView.setLabel('left', 'Intencivity (Angstrom)', **styles)
self.ui.graphicsView.setLabel('bottom', 'Angle (2*Theta)', **styles)
self.ui.graphicsView.addItem(self.vLine, ignoreBounds=True)
self.ui.graphicsView.addItem(self.hLine, ignoreBounds=True)
self.ui.graphicsView.addItem(self.cursorlabel)
self.ui.graphicsView.plot(x, arr, pen=pen)
def mouseMoved(self, evt):
pos = evt
if self.ui.graphicsView.sceneBoundingRect().contains(pos):
mousePoint = self.ui.graphicsView.plotItem.vb.mapSceneToView(pos)
mx = np.array([abs(i - mousePoint.x()) for i in self.plotx])
index = mx.argmin()
index = int(mousePoint.x())
if index > 0 and index < len(self.plotx):
self.cursorlabel.setHtml(
"<span style='font-size: 12pt'>Angle (2*Theta)={:0.1f}, \
<span style='color: black'>Intensivity (Angstrom)={:0.1f}
</span>".format(
mousePoint.x(), mousePoint.y()))
self.vLine.setPos(mousePoint.x())
self.hLine.setPos(mousePoint.y())
Ответы (1 шт):
Итак, нашел причину. Оказывается, отображение координат является неотъемлемой частью графика, которая привязана не к координатам графика, а к координатам виджета. Текст выходит за границы виджета, и программа начинает считать, что текст находится за зоной отображения, из-за чего она начинает менять масштаб. Но из-за этой привязки к виджету, а не графику, это превращается в бесконечное автоматическое уменьшение масштаба.
В итоге, решение данной проблемы следующие:
- Увеличение размеров виджета, чтобы его границы не заходили и не перекрывали текст с координатами
или
- Уменьшение размера текста (с тем же условием, что и для решения с размерами виджета)
или
- Изменение положения отображения координат ближе к нулевой координате графика