81 lines
2.0 KiB
Markdown
81 lines
2.0 KiB
Markdown
# PySide6 6.7+ Compatibility Issue: setSelectionArea API Change
|
|
|
|
## Issue
|
|
|
|
When using NodeGraphQt-QuiltiX-fork with PySide6 6.7+, dragging a rubber band selection in the node graph causes repeated TypeError exceptions:
|
|
|
|
```
|
|
TypeError: 'PySide6.QtWidgets.QGraphicsScene.setSelectionArea' called with wrong argument types:
|
|
PySide6.QtWidgets.QGraphicsScene.setSelectionArea(QPainterPath, ItemSelectionMode)
|
|
Supported signatures:
|
|
PySide6.QtWidgets.QGraphicsScene.setSelectionArea(PySide6.QtGui.QPainterPath, PySide6.QtGui.QTransform)
|
|
PySide6.QtWidgets.QGraphicsScene.setSelectionArea(PySide6.QtGui.QPainterPath, PySide6.QtCore.Qt.ItemSelectionOperation = Instance(Qt.ReplaceSelection), PySide6.QtCore.Qt.ItemSelectionMode = Instance(Qt.IntersectsItemShape), PySide6.QtGui.QTransform = Default(QTransform))
|
|
```
|
|
|
|
## Root Cause
|
|
|
|
The `QGraphicsScene.setSelectionArea()` method signature changed in PySide6 6.7. The old signature allowed:
|
|
|
|
```python
|
|
setSelectionArea(path, mode) # mode = Qt.ItemSelectionMode
|
|
```
|
|
|
|
The new signature requires:
|
|
|
|
```python
|
|
setSelectionArea(path, operation, mode) # operation = Qt.ItemSelectionOperation
|
|
```
|
|
|
|
## Affected File
|
|
|
|
`NodeGraphQt/widgets/viewer.py` line 524-526
|
|
|
|
## Current Code
|
|
|
|
```python
|
|
self.scene().setSelectionArea(
|
|
path, QtCore.Qt.IntersectsItemShape
|
|
)
|
|
```
|
|
|
|
## Fix
|
|
|
|
```python
|
|
self.scene().setSelectionArea(
|
|
path, QtCore.Qt.ReplaceSelection,
|
|
QtCore.Qt.IntersectsItemShape
|
|
)
|
|
```
|
|
|
|
## Environment
|
|
|
|
- Python: 3.12
|
|
- PySide6: 6.6.3.1 (installed by NodeGraphQt-QuiltiX-fork, but issue affects 6.7+)
|
|
- NodeGraphQt-QuiltiX-fork: 0.7.0
|
|
|
|
## Workaround
|
|
|
|
Apply this patch after installation:
|
|
|
|
```python
|
|
# In viewer.py, change line 524-526 from:
|
|
self.scene().setSelectionArea(
|
|
path, QtCore.Qt.IntersectsItemShape
|
|
)
|
|
|
|
# To:
|
|
self.scene().setSelectionArea(
|
|
path, QtCore.Qt.ReplaceSelection,
|
|
QtCore.Qt.IntersectsItemShape
|
|
)
|
|
```
|
|
|
|
## Related
|
|
|
|
This issue may also exist in:
|
|
- Original NodeGraphQt
|
|
- OdenGraphQt
|
|
- Other forks
|
|
|
|
The fix is backward compatible with older PySide6 versions that support the 3-argument signature.
|