A working example, hopefully should help you out:
#!/usr/bin/env python3
import numpy as np
from PyQt5 import QtWidgets
import pyqtgraph as pg
#!/usr/bin/env python3
import numpy as np
from PyQt5 import QtWidgets
import pyqtgraph as pg
class TestImage(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# Basic UI layout
self.statusbar = QtWidgets.QStatusBar(self)
self.setStatusBar(self.statusbar)
self.glw = pg.GraphicsLayoutWidget()
self.setCentralWidget(self.glw)
# Make image plot
self.p1 = self.glw.addPlot()
self.p1.getViewBox().setAspectLocked()
# Draw axes and ticks above image/data
[ self.p1.getAxis(ax).setZValue(10) for ax in self.p1.axes ]
self.data = np.random.rand(120, 100)
self.img = pg.ImageItem(self.data)
self.p1.addItem(self.img)
# Centre axis ticks on pixel
self.img.setPos(-0.5, -0.5)
# Swap commented lines to choose between hover or click events
self.p1.scene().sigMouseMoved.connect(self.mouseMovedEvent)
#self.p1.scene().sigMouseClicked.connect(self.mouseClickedEvent)
def mouseClickedEvent(self, event):
self.mouseMovedEvent(event.pos())
def mouseMovedEvent(self, pos):
# Check if event is inside image, and convert from screen/pixels to
image xy indicies
if self.p1.sceneBoundingRect().contains(pos):
mousePoint = self.p1.getViewBox().mapSceneToView(pos)
x_i = round(mousePoint.x())
y_i = round(mousePoint.y())
if x_i > 0 and x_i < self.data.shape[0] and y_i > 0 and y_i <
self.data.shape[1]:
self.statusbar.showMessage("({}, {}) = {:0.2f}".format(x_i,
y_i, self.data[x_i, y_i]))
return
self.statusbar.clearMessage()
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
mainwindow = TestImage()
mainwindow.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Patrick
On Wednesday, 19 February 2020 00:08:21 UTC+10:30, Stephen Shillitoe wrote:
>
> I've tried to adapt the crosshair example to my code without success - I
> cannot get the mouse clicked event to fire. I think I must be missing
> something basic. Here is the code I have tried. I am new to pyqtgraph, so
> any suggestions would be gratefully received.
>
> imageViewer = pg.GraphicsLayoutWidget()
> imageViewer.setMouseTracking(True)
> viewBox = imageViewer.addViewBox()
> imageViewer.scene().sigMouseClicked.connect(self.getPixel)
> #also tried, without success
> #viewBox.proxy = pg.SignalProxy(viewBox.scene().sigMouseClicked,
> rateLimit=60, slot=self.getPixel)
>
> def getPixel(self, event):
> print('getPixel')
> print (str(event.pos().x()),str(event.pos().y()))
> event.accept()
>
>
> On Monday, February 17, 2020 at 3:19:11 PM UTC, Stephen Shillitoe wrote:
>>
>>
>> I have built a PyQt5, Python 3.7 windows application that uses PyQtGraph
>> to view monochrome (greyscale) Magnetic Resonance DICOM images. As I move
>> the mouse pointer over the image, I would like to display the value of the
>> pixel under the pointer on the window. There is no obvious (to me)
>> functionality in PyQtGraph to do this. I would be very grateful for any
>> suggestions by more experienced developers of how to do this. Here is an
>> edited code segment showing how I display the image (pixelArray) in an MDI
>> subwindow.
>>
>> layout = QVBoxLayout()
>> widget = QWidget()
>> widget.setLayout(layout)
>> self.subWindow.setWidget(widget)
>>
>> imageViewer = pg.GraphicsLayoutWidget()
>> viewBox = imageViewer.addViewBox()
>> image= pg.ImageItem(border='w')
>> viewBox.addItem(image)
>> imageView = pg.ImageView(view=viewBox, imageItem=image)
>> layout.addWidget(imageView)
>> imageView.setImage(pixelArray)
>>
>>
--
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/ab245d06-cab5-463d-bcf8-4dab3cadc8a8%40googlegroups.com.