I have made some progress with this.

I upgraded from PySide 6.0.2 to 6.2.2.1 (the latest available in PyPi) the 
*AttributeError: 
'PySide6.QtGui.QLinearGradient' object has no attribute 'setStops'* error 
disappeared, only to be replaced by another, well OK- the same one multiple 
times:



*Traceback (most recent call last):  File 
"c:\Users\oli_n\pycode\examview\.examview.env\lib\site-packages\pyqtgraph\graphicsItems\GraphicsObject.py",
 
line 24, in itemChange    self.parentChanged()TypeError: native Qt signal 
is not callable*

The same error (for a couple of different lines in the same file) is 
repeated multiple times (_many times_) but the code runs OK.
(yes - I receive a deprecation warning about this line sys.exit(app.exec_()) 
but of course that's OK)

I switched back to PySide 5 (5.15.2) and all runs well with pyqtgraph 
0.12.3 with no errors/warnings.

So I am now only using PySide 5, which isn't a problem right now, but it 
sounds like support for this will be dropped by pyqtgraph soon.
__________________


OK- This seems to be related to what should have been fixed by PR #2132 
(related to the PySIde bug https://bugreports.qt.io/browse/PYSIDE-1730 ).
Hopefully this makes it into the next pyqtgraph release.

Cheers-
 Oli

On Wednesday, January 5, 2022 at 1:17:30 PM UTC+8 Oli N wrote:

> Hi all-
>
>   I am trying to implement a way to interactively invert greyscale image 
> colours.  I would like to do this by changing the way the colours are 
> displayed rather than changing the original data (the original data can be 
> somewhat complicated) - the best way of doing this that I could find is to 
> extract the current ColorMap, apply its .reverse() method and re-apply that 
> altered ColorMap.  This feature seems to have been introduced in PyQtGraph 
> 0.12.2 and has been working fine in my code in a small test script based on 
> the PyQtGraph example code in ImageView.py.  Essentially this:
> inv_cmap = imw.ui.histogram.gradient.colorMap()
> inv_cmap.reverse()
> imw.setColorMap(inv_cmap) 
>
> Which does this nicely.
> [image: image.png]
>
>   I am subclassing pg.ImageView in my main code - the code I have been 
> using works just fine in 0.12.1, but raises an odd exception in 0.12.2 and 
> 0.12.3 (traceback included below.)  So I want the ColorMap.reverse() method 
> but I am unable to use 0.12.2 or .3... :(
>  
>
>   Can anyone help me here? I would like to fix the subclassing if 
> possible, and then use the .reverse() ColorMap method.  I am probably doing 
> this wrong somewhere.
> If this is important, I am variably using PySide6, PySide2 and maybe PyQt 
> 5 on old Macs where I have trouble installing PySide.  These tracebacks 
> were generated on PySide6, on Python 3.9.
>
>
> Here is minimum code which reproduces the issues:
> from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
> from PySide6.QtWidgets import QWidget, QVBoxLayout
>
> import pyqtgraph as pg
> import numpy as np
> import sys
>
>
> class MainWindow(QMainWindow):
>     def __init__(self):
>         super().__init__()
>
>         self.cw = QWidget(self)
>         self.cw.setAutoFillBackground(True)
>         self.setCentralWidget(self.cw)
>
>         self.layout = QVBoxLayout()
>         self.cw.setLayout(self.layout)
>
>         self.ImgWidget = MyImageWidget(parent=self)
>         self.layout.addWidget(self.ImgWidget)
>
>         self.inv_btn = QPushButton('Invert Image')
>         self.inv_btn.clicked.connect(self.ImgWidget.invert_image)
>         self.layout.addWidget(self.inv_btn)
>
>         self.resize(800, 800)
>         self.show()
>
>
> class MyImageWidget(pg.ImageView):
>     def __init__(self, parent):
>         super().__init__(parent, view=pg.PlotItem())
>
>         # Clean up the interface
>         self.ui.histogram.hide()
>         self.ui.roiBtn.hide()
>         self.ui.menuBtn.hide()
>
>         self.plot = self.getView()
>         self.plot.hideAxis('left')
>         self.plot.hideAxis('bottom')
>         self.plot.setMenuEnabled(False)
>
>         self.inverted = False
>         # 300x200 img random noise
>         img = np.random.normal(size=(300, 200))
>         self.setImage(img)
>
>         self.def_cmap = self.ui.histogram.gradient.colorMap()
>         self.inv_cmap = self.ui.histogram.gradient.colorMap()
>         self.inv_cmap.reverse()
>
>     def invert_image(self):
>         self.inverted = not(self.inverted)
>         if self.inverted:
>             self.setColorMap(self.inv_cmap)
>         else:
>             self.setColorMap(self.def_cmap)
>
>
> def main():
>     app = QApplication(sys.argv)
>     main = MainWindow()
>     main.show()
>     sys.exit(app.exec_())
>
>
> if __name__ == '__main__':
>     main()
>
>
> in 0.12.2 and 0.12.3 the code fails on creation of the subclassed 
> pg.ImageView - specifically the super statement.
>
> Traceback (most recent call last):
>   File "c:/Users/oli_n/pycode/examview/test-reverse.py", line 71, in 
> <module>
>     main()
>   File "c:/Users/oli_n/pycode/examview/test-reverse.py", line 65, in main
>     main = MainWindow()
>   File "c:/Users/oli_n/pycode/examview/test-reverse.py", line 20, in 
> __init__
>     self.ImgWidget = MyImageWidget(parent=self)
>   *File "c:/Users/oli_n/pycode/examview/test-reverse.py", line 33, in 
> __init__*
> *    super().__init__(parent, view=pg.PlotItem())*
>
>
>   ...edit...
>
>
>   File 
> "c:\Users\oli_n\pycode\examview\.examview.env\lib\site-packages\pyqtgraph\graphicsItems\GradientEditorItem.py",
>  
> line 642, in getGradient
>     g.setStops([(x, QtGui.QColor(t.color)) for t,x in ticks])
> *AttributeError: 'PySide6.QtGui.QLinearGradient' object has no attribute 
> 'setStops'*
> QPaintDevice: Cannot destroy paint device that is being painted
>
>
>
> In 0.12.1 the subclassing seems to work OK, however an exception is thrown 
> when trying the .reverse() ColorMap method - of course this method is not 
> implemented in 0.12.1, only 0.12.2 and later.
>
>
> 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/4d432044-bb2b-4cbc-85a0-5a2d744f4026n%40googlegroups.com.

Reply via email to