(2024.12.23) 수정됨.
pyqtgraph에는 polygon(다각형)을 그리는 Item object가 존재하지 않는다.
관련 기능을 원한다면 사용자가 직접 작성해야 하는데, 다음과 같이 코드를 작성하면 다각형을 그릴 수 있게 된다.
코드는 테스트용으로 작성한 것이라 많이 조악하다.
코드 작성 방법은 다음 링크 참고.
https://white.seolpyo.com/entry/143/
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
class PolygonItem(pg.GraphicsObject):
list_polygon = []
def __init__(self, segment, pen=None, brush=None, *args, **kwargs):
super().__init__()
if not pen: pen = pg.mkPen('r')
if not brush: brush = pg.mkBrush('y')
x, y = ([], [])
for s in segment:
for i in s: (x.append(i[0]), y.append(i[1]))
self.xmin, self.xmax = (min(x), max(x))
self.ymin, self.ymax = (min(y), max(y))
self.segment = segment
self.pen, self.brush = (pen, brush)
return
def set_polygon(self):
segment = self.segment
points = []
for s in segment:
points.clear()
for i in s: points.append(QtCore.QPointF(*i))
polygon = QtGui.QPolygonF(points)
self.list_polygon.append(polygon)
return
def paint(self, p: QtGui.QPainter, *args):
if not self.list_polygon: self.set_polygon()
(p.setBrush(self.brush), p.setPen(self.pen))
for polygon in self.list_polygon: p.drawPolygon(polygon)
return
def boundingRect(self):
xmin, xmax = (self.xmin, self.xmax)
ymin, ymax = (self.ymin, self.ymax)
px = py = 0
pxPad = 0.4
px, py = self.pixelVectors()
# print(f'{(px, py)=}')
px = 0 if px is None else px.length()
py = 0 if py is None else py.length()
px *= pxPad
py *= pxPad
r = QtCore.QRectF(xmin-px, ymin-py, (2*px)+xmax-xmin, (2*py)+ymax-ymin)
return r
segment = [
(
(5, 5),
(2, 2),
(8, 3),
(1, 3),
(6.5, 2),
),
(
(10, 5),
(11, 2),
(16, 8),
(13, 6),
),
]
widget = pg.plot(title='draw polygon item')
pi = PolygonItem(segment)
widget.addItem(pi)
pg.exec()
![]()