Skip to content

Stylesheet Test fails (PySide6, Python 3.12) #102

Open
@martinschwinzerl

Description

@martinschwinzerl

Installing PythonQwt version 0.14.5 into a python 3.12.3 virtual environment together with PySide6 (version 6.9.1) and running the stylesheet testcase results in the following backtrace:

Python 3.12.3 (main, Jun 18 2025, 17:59:45) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from qwt import tests
>>> tests.run()
Traceback (most recent call last):
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/tests/test_stylesheet.py", line 37, in <module>
    test_stylesheet()
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/tests/test_stylesheet.py", line 33, in test_stylesheet
    utils.test_widget(StyleSheetPlot, size=(600, 400))
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/tests/utils.py", line 301, in test_widget
    central_widget.add_widget(widget)
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/tests/utils.py", line 252, in add_widget
    self.layout().addWidget(widget)
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/plot_canvas.py", line 582, in event
    self.updateStyleSheetInfo()
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/plot_canvas.py", line 809, in updateStyleSheetInfo
    self.style().drawPrimitive(QStyle.PE_Widget, opt, painter, self)
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/null_paintdevice.py", line 59, in drawRects
    device.drawRects(rects, rectCount)
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/plot_canvas.py", line 80, in drawRects
    self.border.rectList += [rects.getRect().index(i)]
                             ^^^^^^^^^^^^^
AttributeError: Error calling Python override of QFrame::event(): Error calling Python override of QPaintEngine::drawRects(): 'list' object has no attribute 'getRect'
^X^C^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/martin/.virtualenvs/venv/lib/python3.12/site-packages/qwt/tests/__init__.py", line 37, in run
    app.exec()

The other testcases seem to work without trouble.

It seems that the issue is caused by the handling of the PySide backend in the plotRects implementation inside plot_canvas.py. Something along the lines of this change seems to fix it (with some of the corner cases still present most likely not needed anymore):

diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py
index c7c7950..ff8705e 100644
--- a/qwt/plot_canvas.py
+++ b/qwt/plot_canvas.py
@@ -75,9 +75,16 @@ class QwtStyleSheetRecorder(QwtNullPaintDevice):
             # Pyside
             if isinstance(rects, (QRect, QRectF)):
                 self.border.list = [rects]
+            elif all(isinstance(rects, (QRect, QRectF)):
+                if isinstance(rects, list):
+                    self.border.rectList += rects
+                else:
+                    # That may not even be necessary
+                    self.border.rectList += [r for r in rects]
             else:
+                # Should we get here ?
                 for i in range(count):
-                    self.border.rectList += [rects.getRect().index(i)]
+                    self.border.rectList += [rects[i]]
         else:
             # PyQt
             for i in range(count):
``

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions