Hi,

Your lambda function need to accept the "pos" argument received from the 
mouse move signal and pass it on to your getPixel function, along with 
whatever else you need to. So something like:
imv.getView().scene().sigMouseMoved.connect(lambda pos: self.getPixel(pos, 
imv, pixelArray))
# ...
def getPixel(self, pos, imv, pixelArray):
    # ...


Just as a side note, I consider the pyqtgraph ImageView as more of an 
example of how to build the pyqtgraph components into an application, 
rather than a component to be integrated into your own apps. As such, it's 
not easy to extend or modify, as you have just found out... I might suggest 
copy-pasting the ImageView code into your own class (built on QMainWindow 
for example, as in my previous code), as if you decide to further change 
the appearance or behaviour of ImageView, you'll find yourself doing more 
awkward coding tricks like this. I know it's probably not a popular 
suggestion to re-write your application, but might be a good time to do it 
now if it saves more problems in the future!

Patrick

On Friday, 21 February 2020 05:55:20 UTC+10:30, Stephen Shillitoe wrote:
>
> Thank you for your previous post. Because of this, I have managed to get 
> the following code working.  However, in function getPixel, in order to get 
> the commented out code to work, I need to pass imv (ImageView) and 
> pixelArray (the image)  into getPixel.  So when I change
>  imv.getView().scene().sigMouseMoved.connect(self.getPixel), which works 
> to
> imv.getView().scene().sigMouseMoved.connect(lambda: self.getPixel(imv, 
> pixelArray)
>
> I get an error informing me that there is no positional argument for pos; 
> thus,
> Traceback (most recent call last):
>   File "C:\Users\scsssh\source\repo1\Weasel\Weasel.py", line 736, in 
> <lambda>
>     lambda: self.getPixel(imv, pixelArray))
> TypeError: getPixel() missing 1 required positional argument: 'pos'
>
> So, I think the question is how do I pass imv and pixelArray into getPixel 
> as function arguments.
>
>     def getPixel(self, pos):
>         try:
>             print ("Image position: {}".format(pos))
>            # container = imv.getView()
>           #  if container.sceneBoundingRect().contains(pos): 
>            #     mousePoint = container.getViewBox().mapSceneToView (pos) 
>            #     x_i = round(mousePoint.x()) 
>              #   y_i = round(mousePoint.y()) 
>             #    if x_i > 0 and x_i < img.shape [ 0 ] \
>             #        and y_i > 0 and y_i < img.shape [ 1 ]: 
>              #      print( "({}, {}) = {:0.2f}" . format ( x_i , y_i , img 
> [ x_i , y_i ])) 
>
> 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/7e3715bf-e104-4689-a435-c42b471ee57e%40googlegroups.com.

Reply via email to