From 44d90052a94612482ebc5dd723b12cf4187477d5 Mon Sep 17 00:00:00 2001 From: Martin Schwinzerl Date: Sat, 12 Jul 2025 01:39:35 +0200 Subject: [PATCH 1/7] [FIX] wrong handling of border.rectList with PySide6 backend This appears to fix the problems described in issue #102 . The changes can be made more pythonic, this patch literally came out of my debugging session - feedback regarding cleaning it up and making it ready for merging would be highly appreciated --- qwt/plot_canvas.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 @@ def drawRects(self, rects, count): # 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): From 053193474db0a13ca7ed9864259744b8afa694e3 Mon Sep 17 00:00:00 2001 From: Martin Schwinzerl Date: Sat, 12 Jul 2025 01:49:03 +0200 Subject: [PATCH 2/7] [FIX] missing generator expression for all(isinstance) check --- qwt/plot_canvas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py index ff8705e..18d07f2 100644 --- a/qwt/plot_canvas.py +++ b/qwt/plot_canvas.py @@ -75,7 +75,7 @@ def drawRects(self, rects, count): # Pyside if isinstance(rects, (QRect, QRectF)): self.border.list = [rects] - elif all(isinstance(rects, (QRect, QRectF)): + elif all(isinstance(r, (QRect, QRectF) for r in rects): if isinstance(rects, list): self.border.rectList += rects else: From ab18915756420f64e48d4a9819e65ac9659d93be Mon Sep 17 00:00:00 2001 From: Martin Schwinzerl Date: Sat, 12 Jul 2025 01:49:03 +0200 Subject: [PATCH 3/7] [FIX] missing generator expression for all(isinstance) check --- qwt/plot_canvas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py index ff8705e..3a9a6ca 100644 --- a/qwt/plot_canvas.py +++ b/qwt/plot_canvas.py @@ -75,7 +75,7 @@ def drawRects(self, rects, count): # Pyside if isinstance(rects, (QRect, QRectF)): self.border.list = [rects] - elif all(isinstance(rects, (QRect, QRectF)): + elif all(isinstance(r, (QRect, QRectF)) for r in rects): if isinstance(rects, list): self.border.rectList += rects else: From 21333e934088430a3dbac6dd321e5a8c10dc3304 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut Date: Sat, 12 Jul 2025 16:54:10 +0200 Subject: [PATCH 4/7] Update plot_canvas.py Here is my proposition to keep one of the case that was implemented for issue #63 --- qwt/plot_canvas.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py index 3a9a6ca..a6f5c6c 100644 --- a/qwt/plot_canvas.py +++ b/qwt/plot_canvas.py @@ -75,16 +75,11 @@ def drawRects(self, rects, count): # Pyside if isinstance(rects, (QRect, QRectF)): self.border.list = [rects] - elif all(isinstance(r, (QRect, QRectF)) for r in rects): - if isinstance(rects, list): - self.border.rectList += rects - else: - # That may not even be necessary - self.border.rectList += [r for r in rects] + elif isinstance(rects, list): + self.border.list += rects else: - # Should we get here ? for i in range(count): - self.border.rectList += [rects[i]] + self.border.rectList += [rects.getRect().index(i)] else: # PyQt for i in range(count): From 80ec6cece49a4ff1a29a215dcab8a5d911d9cbe4 Mon Sep 17 00:00:00 2001 From: Martin Schwinzerl Date: Sun, 13 Jul 2025 08:23:48 +0200 Subject: [PATCH 5/7] [UPDATE] fix wrong attribute name The class Border has a rectList member, but some lines in drawRects() refered to a member attribute named list. This caused the test to fail again on PySide6, test passes now with these modifications. --- qwt/plot_canvas.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py index a6f5c6c..6be4b8d 100644 --- a/qwt/plot_canvas.py +++ b/qwt/plot_canvas.py @@ -74,9 +74,9 @@ def drawRects(self, rects, count): if QT_API.startswith("pyside"): # Pyside if isinstance(rects, (QRect, QRectF)): - self.border.list = [rects] + self.border.rectList = [rects] elif isinstance(rects, list): - self.border.list += rects + self.border.rectList += rects else: for i in range(count): self.border.rectList += [rects.getRect().index(i)] From bdb7e433119f12750239cc3c693edee75ca14480 Mon Sep 17 00:00:00 2001 From: Pierre Raybaut Date: Sun, 13 Jul 2025 09:31:32 +0200 Subject: [PATCH 6/7] [REFINE] improve drawRects method to handle QRect and sequence types --- qwt/plot_canvas.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py index 6be4b8d..cbe8177 100644 --- a/qwt/plot_canvas.py +++ b/qwt/plot_canvas.py @@ -14,6 +14,7 @@ """ import os +from collections.abc import Sequence from qtpy.QtCore import QEvent, QObject, QPoint, QPointF, QRect, QRectF, QSize, Qt from qtpy.QtGui import ( @@ -34,8 +35,6 @@ from qwt.null_paintdevice import QwtNullPaintDevice from qwt.painter import QwtPainter -QT_API = os.environ["QT_API"] - class Border(object): def __init__(self): @@ -71,19 +70,15 @@ def updateState(self, state): self.__origin = state.brushOrigin() def drawRects(self, rects, count): - if QT_API.startswith("pyside"): - # Pyside - if isinstance(rects, (QRect, QRectF)): - self.border.rectList = [rects] - elif isinstance(rects, list): - self.border.rectList += rects - else: - for i in range(count): - self.border.rectList += [rects.getRect().index(i)] + if isinstance(rects, (QRect, QRectF)): + self.border.rectList = [QRectF(rects)] + elif isinstance(rects, Sequence): + self.border.rectList.extend(QRectF(rects[i]) for i in range(count)) else: - # PyQt - for i in range(count): - self.border.rectList += [rects[i]] + raise TypeError( + "drawRects() expects a QRect, QRectF or a sequence of them, " + f"but got {type(rects).__name__}" + ) def drawPath(self, path): rect = QRectF(QPointF(0.0, 0.0), self.__size) From 9d5ae0f116b134e764e1cfbb800056108d72b0db Mon Sep 17 00:00:00 2001 From: Pierre Raybaut Date: Mon, 14 Jul 2025 12:11:33 +0200 Subject: [PATCH 7/7] Remove unused `os` import --- qwt/plot_canvas.py | 1 - 1 file changed, 1 deletion(-) diff --git a/qwt/plot_canvas.py b/qwt/plot_canvas.py index cbe8177..1b90ed1 100644 --- a/qwt/plot_canvas.py +++ b/qwt/plot_canvas.py @@ -13,7 +13,6 @@ :members: """ -import os from collections.abc import Sequence from qtpy.QtCore import QEvent, QObject, QPoint, QPointF, QRect, QRectF, QSize, Qt