Attempt number 2. I tried to make a custom symbol (like the
pyqtgraph.examples one with text as the scatterplot item) for each segment.
It's close, but I can't find out how to make each triangle 'life-sized'.
Can someone with experience using QPainterPaths weigh in? Thanks!
import pyqtgraph as pg
from pyqtgraph.Qt import QtWidgets, QtCore, QtGui
import numpy as np
tri = np.array([[0,0], [0,5], [5,5], [0,0]])
tris = []
xyLocs = []
datas = []
for ii in np.arange(0, 16, 5):
curTri = tri + ii
tris.append(curTri)
xyLocs.append(curTri.min(0))
datas.append(ii)
def ptsClicked(item, pts):
print(f'ID {pts[0].data()} Clicked!')
def makeSymbol(verts: np.ndarray):
outSymbol = QtGui.QPainterPath()
symPath = pg.arrayToQPath(*verts.T)
outSymbol.addPath(symPath)
# From pyqtgraph.examples for plotting text
br = outSymbol.boundingRect()
tr = QtGui.QTransform()
tr.scale(1/br.width(), 1/br.height())
tr.translate(-br.x() - br.width()/2., -br.y() - br.height()/2.)
outSymbol = tr.map(outSymbol)
return outSymbol
app = pg.mkQApp()
symbs = []
for xyLoc, tri in zip(xyLocs, tris):
symbs.append(makeSymbol(tri))
xyLocs = np.vstack(xyLocs)
tri2 = pg.PlotDataItem(*xyLocs.T, symbol=symbs, data=datas, connect='finite'
,
pen=None)
# Now each 'point' is one of the triangles, hopefully
tri2.sigPointsClicked.connect(ptsClicked)
w = pg.PlotWindow()
w.plotItem.addItem(tri2)
w.show()
app.exec()
Enter code here...
On Saturday, June 6, 2020 at 9:44:36 PM UTC-4, Nathan Jessurun wrote:
>
> Hi there,
>
> My overall goal is to have several clickable regions overlaid on an image,
> and if the plot boundary of any region is clicked I get a signal with the
> ID of that region. Something like this:
> I tried making each boundary a separate plot data item, but I have 1000s
> of bounds that update frequently so it lagged a ton. So, I just used
> connect='finite' within the same plot item to make it much faster.
>
> However, now I can't give a separate ID to each boundary. I have to make
> the vertices stand out, and connect to sigclicked(...pts) instead:
>
> This works, but I'd love to be able to click anywhere on one of the line
> segments for the same effect. Is there any way to make this happen?
>
> Relevant code is just a PlotDataItem on a plot widget.
>
> Thanks!
>
--
You received this message because you are subscribed to the Google Groups
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/pyqtgraph/3199cb82-a432-4434-aed4-c716fbcd932eo%40googlegroups.com.