Skip to content

Commit d23f82c

Browse files
committed
Fix slider signal connections in _generic_range_slider.py and _generic_slider.py
Fix #21
1 parent bbf770c commit d23f82c

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

plotpy/external/sliders/_generic_range_slider.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,29 @@ class _GenericRangeSlider(_GenericSlider):
2727
integers.
2828
"""
2929

30-
# Emitted when the slider value has changed, with the new slider values
31-
_valuesChanged = Signal(tuple)
32-
33-
# Emitted when sliderDown is true and the slider moves
34-
# This usually happens when the user is dragging the slider
35-
# The value is the positions of *all* handles.
36-
_slidersMoved = Signal(tuple)
30+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
31+
# https://github.com/PlotPyStack/PlotPy/issues/21
32+
# _valuesChanged = Signal(tuple)
33+
# _slidersMoved = Signal(tuple)
34+
# -- END --
35+
36+
# -- BEGIN -- New implementation: avoid segfault by overriding the class attributes
37+
# instead of overriding them through instance attributes in `__init__`
38+
valueChanged = Signal(tuple)
39+
sliderMoved = Signal(tuple)
40+
# -- END --
3741

3842
def __init__(self, *args, **kwargs):
3943
self._style = RangeSliderStyle()
4044

4145
super().__init__(*args, **kwargs)
42-
self.valueChanged = self._valuesChanged
43-
self.sliderMoved = self._slidersMoved
46+
47+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
48+
# https://github.com/PlotPyStack/PlotPy/issues/21
49+
# self.valueChanged = self._valuesChanged
50+
# self.sliderMoved = self._slidersMoved
51+
# -- END --
52+
4453
# list of values
4554
self._value: List[_T] = [20, 80]
4655

plotpy/external/sliders/_generic_slider.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
scalar (with one handle per item), and it forms the basis of
2020
QRangeSlider.
2121
"""
22+
2223
import os
2324
import platform
2425
from typing import TypeVar
@@ -59,9 +60,19 @@
5960

6061

6162
class _GenericSlider(QSlider):
62-
_fvalueChanged = Signal(int)
63-
_fsliderMoved = Signal(int)
64-
_frangeChanged = Signal(int, int)
63+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
64+
# https://github.com/PlotPyStack/PlotPy/issues/21
65+
# _fvalueChanged = Signal(int)
66+
# _fsliderMoved = Signal(int)
67+
# _frangeChanged = Signal(int, int)
68+
# -- END --
69+
70+
# -- BEGIN -- New implementation: avoid segfault by overriding the class attributes
71+
# instead of overriding them through instance attributes in `__init__`
72+
valueChanged = Signal(int)
73+
sliderMoved = Signal(int)
74+
rangeChanged = Signal(int, int)
75+
# -- END --
6576

6677
MAX_DISPLAY = 5000
6778

@@ -88,9 +99,13 @@ def __init__(self, *args, **kwargs) -> None:
8899
self._control_fraction = 0.04
89100

90101
super().__init__(*args, **kwargs)
91-
self.valueChanged = self._fvalueChanged
92-
self.sliderMoved = self._fsliderMoved
93-
self.rangeChanged = self._frangeChanged
102+
103+
# -- BEGIN -- Original implementation, causing segfault on Linux with PySide6
104+
# https://github.com/PlotPyStack/PlotPy/issues/21
105+
# self.valueChanged = self._fvalueChanged
106+
# self.sliderMoved = self._fsliderMoved
107+
# self.rangeChanged = self._frangeChanged
108+
# -- END --
94109

95110
self.setAttribute(Qt.WidgetAttribute.WA_Hover)
96111
self.setStyleSheet("")

0 commit comments

Comments
 (0)