Подвижная ограничивающая рамка QGraphicsLineItem

Я пытаюсь добавить перетаскиваемый QtGui.QGraphicsLineItem в pyqtgraph.plotItem.

из PyQt4 импортировать QtCore, QtGui импортировать pyqtgraph как pg

app = QtGui.QApplication([])

w = pg.PlotWidget()
w.show()

line = QtGui.QGraphicsLineItem()
line.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
line.setPen(QtGui.QPen(QtGui.QColor(255, 0, 0), 2))
line.setLine(0, 0, 100, 100)

w.plotItem.addItem(line)

app.exec_()

Однако есть несколько проблем: - ширина линии изменяется при масштабировании графика - область, где начинается перетаскивание, включает всю ограничивающую рамку прямоугольника (см. рисунок ниже) drag_area

Я пробовал следующие трюки: 1)

line.setFlag(QtGui.QGraphicsItem.ItemIgnoresTransformations)
w.plotItem.addItem(line)

2)

line.setParentItem(w.plotItem.vb)

Но проблема с областью перетаскивания все еще сохраняется


person den    schedule 18.04.2016    source источник


Ответы (2)


Вы можете использовать LineSegmentRoi из pyqtgraph.

line = pg.LineSegmentROI([0, 100], [0, 0], pen=(255, 0, 0))
w.plotItem.addItem(line)
person luddek    schedule 18.04.2016

Хорошо, вот решение. Когда мы используем QtGui.QGraphicsLineItem:

1) Для проблемы «изменения ширины линии при увеличении графика» используйте pen.setCosmetic(True) или создайте перо с помощью pg.mkPen

2) Для проблемы «область, в которой начинается перетаскивание, включает всю ограничивающую рамку прямоугольника (см. рисунок ниже)», используйте mouseDragEvent вместо использования line.setFlag(QtGui.QGraphicsItem.ItemIsMovable)

person den    schedule 21.04.2016