We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Bug in slider parameter
<!-- In the following, please describe your issue in detail! -->
<!-- If some sections do not apply, just remove them. -->

### Short description
<!-- This should summarize the issue. -->
Bug that precludes use of suffix in SliderParameter
### Code to reproduce
<!-- Please provide a minimal working example that reproduces the issue in the code block below.
     Ideally, this should be a full example someone else could run without additional setup. -->

```python
import pyqtgraph as pg
import numpy as np
from pyqtgraph.parametertree import (Parameter, ParameterTree, registerParameterType)

        ...
        colorParams = [
            dict(name='Color Settings', type='group', children=[
                dict(name='Opacity', type='slider', limits=[0,100], value = 60.0, suffix='%'),
            ]),
        ]
        self.parameters = pg.parametertree.Parameter.create(name='Analysis Settings', type='group', children=colorParams)
        ...
```

### Expected behavior
<!-- What should happen? -->
Slider should show a number 0 - 100, followed by a '%' suffix

### Real behavior
<!-- What happens? -->
Application crashes, as it refers to a non-existing method
```
An error occurred?
Post the full traceback inside these 'code fences'!

AttributeError
'SliderParameterItem' object has no attribute '_updateLabel'
```

### Solution
 1. Please delete line 32, containing ``` self._updateLabel(self.slider.value())``` as this method does not exist
 2. After ```layout = QHBoxLayout()``` Please add a line containing ```layout.setContentsMargins(0, 0, 0, 0)```
 3. In doing so, the height of the slider item stays equal to the other items (=20), now there is a *bulge*

### Additional context
None
Bug in slider parameter
<!-- In the following, please describe your issue in detail! -->
<!-- If some sections do not apply, just remove them. -->

### Short description
<!-- This should summarize the issue. -->
Bug that precludes use of suffix in SliderParameter
### Code to reproduce
<!-- Please provide a minimal working example that reproduces the issue in the code block below.
     Ideally, this should be a full example someone else could run without additional setup. -->

```python
import pyqtgraph as pg
import numpy as np
from pyqtgraph.parametertree import (Parameter, ParameterTree, registerParameterType)

        ...
        colorParams = [
            dict(name='Color Settings', type='group', children=[
                dict(name='Opacity', type='slider', limits=[0,100], value = 60.0, suffix='%'),
            ]),
        ]
        self.parameters = pg.parametertree.Parameter.create(name='Analysis Settings', type='group', children=colorParams)
        ...
```

### Expected behavior
<!-- What should happen? -->
Slider should show a number 0 - 100, followed by a '%' suffix

### Real behavior
<!-- What happens? -->
Application crashes, as it refers to a non-existing method
```
An error occurred?
Post the full traceback inside these 'code fences'!

AttributeError
'SliderParameterItem' object has no attribute '_updateLabel'
```

### Solution
 1. Please delete line 32, containing ``` self._updateLabel(self.slider.value())``` as this method does not exist
 2. After ```layout = QHBoxLayout()``` Please add a line containing ```layout.setContentsMargins(0, 0, 0, 0)```
 3. In doing so, the height of the slider item stays equal to the other items (=20), now there is a *bulge*

### Additional context
None

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `pyqtgraph/parametertree/parameterTypes/slider.py`
Content:
```
1 import numpy as np
2 
3 from ...Qt import QtCore, QtWidgets
4 from ..Parameter import Parameter
5 from .basetypes import Emitter, WidgetParameterItem
6 
7 
8 class SliderParameterItem(WidgetParameterItem):
9     slider: QtWidgets.QSlider
10     span: np.ndarray
11     charSpan: np.ndarray
12 
13     def __init__(self, param, depth):
14         # Bind emitter to self to avoid garbage collection
15         self.emitter = Emitter()
16         self.sigChanging = self.emitter.sigChanging
17         self._suffix = None
18         super().__init__(param, depth)
19 
20     def updateDisplayLabel(self, value=None):
21         if value is None:
22             value = self.param.value()
23         value = str(value)
24         if self._suffix is None:
25             suffixTxt = ''
26         else:
27             suffixTxt = f' {self._suffix}'
28         self.displayLabel.setText(value + suffixTxt)
29 
30     def setSuffix(self, suffix):
31         self._suffix = suffix
32         self._updateLabel(self.slider.value())
33 
34     def makeWidget(self):
35         param = self.param
36         opts = param.opts
37         opts.setdefault('limits', [0, 0])
38         self._suffix = opts.get('suffix')
39 
40         self.slider = QtWidgets.QSlider()
41         self.slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
42         lbl = QtWidgets.QLabel()
43         lbl.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)
44 
45         w = QtWidgets.QWidget()
46         layout = QtWidgets.QHBoxLayout()
47         w.setLayout(layout)
48         layout.addWidget(lbl)
49         layout.addWidget(self.slider)
50 
51         def setValue(v):
52             self.slider.setValue(self.spanToSliderValue(v))
53 
54         def getValue():
55             return self.span[self.slider.value()].item()
56 
57         def vChanged(v):
58             lbl.setText(self.prettyTextValue(v))
59 
60         self.slider.valueChanged.connect(vChanged)
61 
62         def onMove(pos):
63             self.sigChanging.emit(self, self.span[pos].item())
64 
65         self.slider.sliderMoved.connect(onMove)
66 
67         w.setValue = setValue
68         w.value = getValue
69         w.sigChanged = self.slider.valueChanged
70         w.sigChanging = self.sigChanging
71         self.optsChanged(param, opts)
72         return w
73 
74     def spanToSliderValue(self, v):
75         return int(np.argmin(np.abs(self.span - v)))
76 
77     def prettyTextValue(self, v):
78         if self._suffix is None:
79             suffixTxt = ''
80         else:
81             suffixTxt = f' {self._suffix}'
82         format_ = self.param.opts.get('format', None)
83         cspan = self.charSpan
84         if format_ is None:
85             format_ = f'{{0:>{cspan.dtype.itemsize}}}{suffixTxt}'
86         return format_.format(cspan[v].decode())
87 
88     def optsChanged(self, param, opts):
89         try:
90             super().optsChanged(param, opts)
91         except AttributeError:
92             # This may trigger while building the parameter before the widget is fully constructed.
93             # This is fine, since errors are from the parent scope which will stabilize after the widget is
94             # constructed anyway
95             pass
96         span = opts.get('span', None)
97         if span is None:
98             step = opts.get('step', 1)
99             start, stop = opts.get('limits', param.opts['limits'])
100             # Add a bit to 'stop' since python slicing excludes the last value
101             span = np.arange(start, stop + step, step)
102         precision = opts.get('precision', 2)
103         if precision is not None:
104             span = span.round(precision)
105         self.span = span
106         self.charSpan = np.char.array(span)
107         w = self.slider
108         w.setMinimum(0)
109         w.setMaximum(len(span) - 1)
110         if 'suffix' in opts:
111             self.setSuffix(opts['suffix'])
112             self.slider.valueChanged.emit(self.slider.value())
113 
114     def limitsChanged(self, param, limits):
115         self.optsChanged(param, dict(limits=limits))
116 
117 
118 class SliderParameter(Parameter):
119     """
120     ============== ========================================================
121     **Options**
122     limits         [start, stop] numbers
123     step:          Defaults to 1, the spacing between each slider tick
124     span:          Instead of limits + step, span can be set to specify
125                    the range of slider options (e.g. np.linspace(-pi, pi, 100))
126     format:        Format string to determine number of decimals to show, etc.
127                    Defaults to display based on span dtype
128     precision:     int number of decimals to keep for float tick spaces
129     ============== ========================================================
130     """
131     itemClass = SliderParameterItem
132
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/pyqtgraph/parametertree/parameterTypes/slider.py b/pyqtgraph/parametertree/parameterTypes/slider.py
--- a/pyqtgraph/parametertree/parameterTypes/slider.py
+++ b/pyqtgraph/parametertree/parameterTypes/slider.py
@@ -20,6 +20,7 @@
     def updateDisplayLabel(self, value=None):
         if value is None:
             value = self.param.value()
+        self.sliderLabel.setText(self.prettyTextValue(self.slider.value()))
         value = str(value)
         if self._suffix is None:
             suffixTxt = ''
@@ -27,9 +28,13 @@
             suffixTxt = f' {self._suffix}'
         self.displayLabel.setText(value + suffixTxt)
 
+
     def setSuffix(self, suffix):
         self._suffix = suffix
-        self._updateLabel(self.slider.value())
+        # This may be called during widget construction in which case there is no
+        # displayLabel yet
+        if hasattr(self, 'displayLabel'):
+            self.updateDisplayLabel(self.slider.value())
 
     def makeWidget(self):
         param = self.param
@@ -39,7 +44,7 @@
 
         self.slider = QtWidgets.QSlider()
         self.slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
-        lbl = QtWidgets.QLabel()
+        lbl = self.sliderLabel = QtWidgets.QLabel()
         lbl.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)
 
         w = QtWidgets.QWidget()
@@ -54,10 +59,7 @@
         def getValue():
             return self.span[self.slider.value()].item()
 
-        def vChanged(v):
-            lbl.setText(self.prettyTextValue(v))
-
-        self.slider.valueChanged.connect(vChanged)
+        self.slider.valueChanged.connect(self.updateDisplayLabel)
 
         def onMove(pos):
             self.sigChanging.emit(self, self.span[pos].item())
@@ -109,7 +111,6 @@
         w.setMaximum(len(span) - 1)
         if 'suffix' in opts:
             self.setSuffix(opts['suffix'])
-            self.slider.valueChanged.emit(self.slider.value())
 
     def limitsChanged(self, param, limits):
         self.optsChanged(param, dict(limits=limits))

{"golden_diff": "diff --git a/pyqtgraph/parametertree/parameterTypes/slider.py b/pyqtgraph/parametertree/parameterTypes/slider.py\n--- a/pyqtgraph/parametertree/parameterTypes/slider.py\n+++ b/pyqtgraph/parametertree/parameterTypes/slider.py\n@@ -20,6 +20,7 @@\n     def updateDisplayLabel(self, value=None):\n         if value is None:\n             value = self.param.value()\n+        self.sliderLabel.setText(self.prettyTextValue(self.slider.value()))\n         value = str(value)\n         if self._suffix is None:\n             suffixTxt = ''\n@@ -27,9 +28,13 @@\n             suffixTxt = f' {self._suffix}'\n         self.displayLabel.setText(value + suffixTxt)\n \n+\n     def setSuffix(self, suffix):\n         self._suffix = suffix\n-        self._updateLabel(self.slider.value())\n+        # This may be called during widget construction in which case there is no\n+        # displayLabel yet\n+        if hasattr(self, 'displayLabel'):\n+            self.updateDisplayLabel(self.slider.value())\n \n     def makeWidget(self):\n         param = self.param\n@@ -39,7 +44,7 @@\n \n         self.slider = QtWidgets.QSlider()\n         self.slider.setOrientation(QtCore.Qt.Orientation.Horizontal)\n-        lbl = QtWidgets.QLabel()\n+        lbl = self.sliderLabel = QtWidgets.QLabel()\n         lbl.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)\n \n         w = QtWidgets.QWidget()\n@@ -54,10 +59,7 @@\n         def getValue():\n             return self.span[self.slider.value()].item()\n \n-        def vChanged(v):\n-            lbl.setText(self.prettyTextValue(v))\n-\n-        self.slider.valueChanged.connect(vChanged)\n+        self.slider.valueChanged.connect(self.updateDisplayLabel)\n \n         def onMove(pos):\n             self.sigChanging.emit(self, self.span[pos].item())\n@@ -109,7 +111,6 @@\n         w.setMaximum(len(span) - 1)\n         if 'suffix' in opts:\n             self.setSuffix(opts['suffix'])\n-            self.slider.valueChanged.emit(self.slider.value())\n \n     def limitsChanged(self, param, limits):\n         self.optsChanged(param, dict(limits=limits))\n", "issue": "Bug in slider parameter\n<!-- In the following, please describe your issue in detail! -->\r\n<!-- If some sections do not apply, just remove them. -->\r\n\r\n### Short description\r\n<!-- This should summarize the issue. -->\r\nBug that precludes use of suffix in SliderParameter\r\n### Code to reproduce\r\n<!-- Please provide a minimal working example that reproduces the issue in the code block below.\r\n     Ideally, this should be a full example someone else could run without additional setup. -->\r\n\r\n```python\r\nimport pyqtgraph as pg\r\nimport numpy as np\r\nfrom pyqtgraph.parametertree import (Parameter, ParameterTree, registerParameterType)\r\n\r\n        ...\r\n        colorParams = [\r\n            dict(name='Color Settings', type='group', children=[\r\n                dict(name='Opacity', type='slider', limits=[0,100], value = 60.0, suffix='%'),\r\n            ]),\r\n        ]\r\n        self.parameters = pg.parametertree.Parameter.create(name='Analysis Settings', type='group', children=colorParams)\r\n        ...\r\n```\r\n\r\n### Expected behavior\r\n<!-- What should happen? -->\r\nSlider should show a number 0 - 100, followed by a '%' suffix\r\n\r\n### Real behavior\r\n<!-- What happens? -->\r\nApplication crashes, as it refers to a non-existing method\r\n```\r\nAn error occurred?\r\nPost the full traceback inside these 'code fences'!\r\n\r\nAttributeError\r\n'SliderParameterItem' object has no attribute '_updateLabel'\r\n```\r\n\r\n### Solution\r\n 1. Please delete line 32, containing ``` self._updateLabel(self.slider.value())``` as this method does not exist\r\n 2. After ```layout = QHBoxLayout()``` Please add a line containing ```layout.setContentsMargins(0, 0, 0, 0)```\r\n 3. In doing so, the height of the slider item stays equal to the other items (=20), now there is a *bulge*\r\n\r\n### Additional context\r\nNone\nBug in slider parameter\n<!-- In the following, please describe your issue in detail! -->\r\n<!-- If some sections do not apply, just remove them. -->\r\n\r\n### Short description\r\n<!-- This should summarize the issue. -->\r\nBug that precludes use of suffix in SliderParameter\r\n### Code to reproduce\r\n<!-- Please provide a minimal working example that reproduces the issue in the code block below.\r\n     Ideally, this should be a full example someone else could run without additional setup. -->\r\n\r\n```python\r\nimport pyqtgraph as pg\r\nimport numpy as np\r\nfrom pyqtgraph.parametertree import (Parameter, ParameterTree, registerParameterType)\r\n\r\n        ...\r\n        colorParams = [\r\n            dict(name='Color Settings', type='group', children=[\r\n                dict(name='Opacity', type='slider', limits=[0,100], value = 60.0, suffix='%'),\r\n            ]),\r\n        ]\r\n        self.parameters = pg.parametertree.Parameter.create(name='Analysis Settings', type='group', children=colorParams)\r\n        ...\r\n```\r\n\r\n### Expected behavior\r\n<!-- What should happen? -->\r\nSlider should show a number 0 - 100, followed by a '%' suffix\r\n\r\n### Real behavior\r\n<!-- What happens? -->\r\nApplication crashes, as it refers to a non-existing method\r\n```\r\nAn error occurred?\r\nPost the full traceback inside these 'code fences'!\r\n\r\nAttributeError\r\n'SliderParameterItem' object has no attribute '_updateLabel'\r\n```\r\n\r\n### Solution\r\n 1. Please delete line 32, containing ``` self._updateLabel(self.slider.value())``` as this method does not exist\r\n 2. After ```layout = QHBoxLayout()``` Please add a line containing ```layout.setContentsMargins(0, 0, 0, 0)```\r\n 3. In doing so, the height of the slider item stays equal to the other items (=20), now there is a *bulge*\r\n\r\n### Additional context\r\nNone\n", "before_files": [{"content": "import numpy as np\n\nfrom ...Qt import QtCore, QtWidgets\nfrom ..Parameter import Parameter\nfrom .basetypes import Emitter, WidgetParameterItem\n\n\nclass SliderParameterItem(WidgetParameterItem):\n    slider: QtWidgets.QSlider\n    span: np.ndarray\n    charSpan: np.ndarray\n\n    def __init__(self, param, depth):\n        # Bind emitter to self to avoid garbage collection\n        self.emitter = Emitter()\n        self.sigChanging = self.emitter.sigChanging\n        self._suffix = None\n        super().__init__(param, depth)\n\n    def updateDisplayLabel(self, value=None):\n        if value is None:\n            value = self.param.value()\n        value = str(value)\n        if self._suffix is None:\n            suffixTxt = ''\n        else:\n            suffixTxt = f' {self._suffix}'\n        self.displayLabel.setText(value + suffixTxt)\n\n    def setSuffix(self, suffix):\n        self._suffix = suffix\n        self._updateLabel(self.slider.value())\n\n    def makeWidget(self):\n        param = self.param\n        opts = param.opts\n        opts.setdefault('limits', [0, 0])\n        self._suffix = opts.get('suffix')\n\n        self.slider = QtWidgets.QSlider()\n        self.slider.setOrientation(QtCore.Qt.Orientation.Horizontal)\n        lbl = QtWidgets.QLabel()\n        lbl.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)\n\n        w = QtWidgets.QWidget()\n        layout = QtWidgets.QHBoxLayout()\n        w.setLayout(layout)\n        layout.addWidget(lbl)\n        layout.addWidget(self.slider)\n\n        def setValue(v):\n            self.slider.setValue(self.spanToSliderValue(v))\n\n        def getValue():\n            return self.span[self.slider.value()].item()\n\n        def vChanged(v):\n            lbl.setText(self.prettyTextValue(v))\n\n        self.slider.valueChanged.connect(vChanged)\n\n        def onMove(pos):\n            self.sigChanging.emit(self, self.span[pos].item())\n\n        self.slider.sliderMoved.connect(onMove)\n\n        w.setValue = setValue\n        w.value = getValue\n        w.sigChanged = self.slider.valueChanged\n        w.sigChanging = self.sigChanging\n        self.optsChanged(param, opts)\n        return w\n\n    def spanToSliderValue(self, v):\n        return int(np.argmin(np.abs(self.span - v)))\n\n    def prettyTextValue(self, v):\n        if self._suffix is None:\n            suffixTxt = ''\n        else:\n            suffixTxt = f' {self._suffix}'\n        format_ = self.param.opts.get('format', None)\n        cspan = self.charSpan\n        if format_ is None:\n            format_ = f'{{0:>{cspan.dtype.itemsize}}}{suffixTxt}'\n        return format_.format(cspan[v].decode())\n\n    def optsChanged(self, param, opts):\n        try:\n            super().optsChanged(param, opts)\n        except AttributeError:\n            # This may trigger while building the parameter before the widget is fully constructed.\n            # This is fine, since errors are from the parent scope which will stabilize after the widget is\n            # constructed anyway\n            pass\n        span = opts.get('span', None)\n        if span is None:\n            step = opts.get('step', 1)\n            start, stop = opts.get('limits', param.opts['limits'])\n            # Add a bit to 'stop' since python slicing excludes the last value\n            span = np.arange(start, stop + step, step)\n        precision = opts.get('precision', 2)\n        if precision is not None:\n            span = span.round(precision)\n        self.span = span\n        self.charSpan = np.char.array(span)\n        w = self.slider\n        w.setMinimum(0)\n        w.setMaximum(len(span) - 1)\n        if 'suffix' in opts:\n            self.setSuffix(opts['suffix'])\n            self.slider.valueChanged.emit(self.slider.value())\n\n    def limitsChanged(self, param, limits):\n        self.optsChanged(param, dict(limits=limits))\n\n\nclass SliderParameter(Parameter):\n    \"\"\"\n    ============== ========================================================\n    **Options**\n    limits         [start, stop] numbers\n    step:          Defaults to 1, the spacing between each slider tick\n    span:          Instead of limits + step, span can be set to specify\n                   the range of slider options (e.g. np.linspace(-pi, pi, 100))\n    format:        Format string to determine number of decimals to show, etc.\n                   Defaults to display based on span dtype\n    precision:     int number of decimals to keep for float tick spaces\n    ============== ========================================================\n    \"\"\"\n    itemClass = SliderParameterItem\n", "path": "pyqtgraph/parametertree/parameterTypes/slider.py"}], "after_files": [{"content": "import numpy as np\n\nfrom ...Qt import QtCore, QtWidgets\nfrom ..Parameter import Parameter\nfrom .basetypes import Emitter, WidgetParameterItem\n\n\nclass SliderParameterItem(WidgetParameterItem):\n    slider: QtWidgets.QSlider\n    span: np.ndarray\n    charSpan: np.ndarray\n\n    def __init__(self, param, depth):\n        # Bind emitter to self to avoid garbage collection\n        self.emitter = Emitter()\n        self.sigChanging = self.emitter.sigChanging\n        self._suffix = None\n        super().__init__(param, depth)\n\n    def updateDisplayLabel(self, value=None):\n        if value is None:\n            value = self.param.value()\n        self.sliderLabel.setText(self.prettyTextValue(self.slider.value()))\n        value = str(value)\n        if self._suffix is None:\n            suffixTxt = ''\n        else:\n            suffixTxt = f' {self._suffix}'\n        self.displayLabel.setText(value + suffixTxt)\n\n\n    def setSuffix(self, suffix):\n        self._suffix = suffix\n        # This may be called during widget construction in which case there is no\n        # displayLabel yet\n        if hasattr(self, 'displayLabel'):\n            self.updateDisplayLabel(self.slider.value())\n\n    def makeWidget(self):\n        param = self.param\n        opts = param.opts\n        opts.setdefault('limits', [0, 0])\n        self._suffix = opts.get('suffix')\n\n        self.slider = QtWidgets.QSlider()\n        self.slider.setOrientation(QtCore.Qt.Orientation.Horizontal)\n        lbl = self.sliderLabel = QtWidgets.QLabel()\n        lbl.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)\n\n        w = QtWidgets.QWidget()\n        layout = QtWidgets.QHBoxLayout()\n        w.setLayout(layout)\n        layout.addWidget(lbl)\n        layout.addWidget(self.slider)\n\n        def setValue(v):\n            self.slider.setValue(self.spanToSliderValue(v))\n\n        def getValue():\n            return self.span[self.slider.value()].item()\n\n        self.slider.valueChanged.connect(self.updateDisplayLabel)\n\n        def onMove(pos):\n            self.sigChanging.emit(self, self.span[pos].item())\n\n        self.slider.sliderMoved.connect(onMove)\n\n        w.setValue = setValue\n        w.value = getValue\n        w.sigChanged = self.slider.valueChanged\n        w.sigChanging = self.sigChanging\n        self.optsChanged(param, opts)\n        return w\n\n    def spanToSliderValue(self, v):\n        return int(np.argmin(np.abs(self.span - v)))\n\n    def prettyTextValue(self, v):\n        if self._suffix is None:\n            suffixTxt = ''\n        else:\n            suffixTxt = f' {self._suffix}'\n        format_ = self.param.opts.get('format', None)\n        cspan = self.charSpan\n        if format_ is None:\n            format_ = f'{{0:>{cspan.dtype.itemsize}}}{suffixTxt}'\n        return format_.format(cspan[v].decode())\n\n    def optsChanged(self, param, opts):\n        try:\n            super().optsChanged(param, opts)\n        except AttributeError:\n            # This may trigger while building the parameter before the widget is fully constructed.\n            # This is fine, since errors are from the parent scope which will stabilize after the widget is\n            # constructed anyway\n            pass\n        span = opts.get('span', None)\n        if span is None:\n            step = opts.get('step', 1)\n            start, stop = opts.get('limits', param.opts['limits'])\n            # Add a bit to 'stop' since python slicing excludes the last value\n            span = np.arange(start, stop + step, step)\n        precision = opts.get('precision', 2)\n        if precision is not None:\n            span = span.round(precision)\n        self.span = span\n        self.charSpan = np.char.array(span)\n        w = self.slider\n        w.setMinimum(0)\n        w.setMaximum(len(span) - 1)\n        if 'suffix' in opts:\n            self.setSuffix(opts['suffix'])\n\n    def limitsChanged(self, param, limits):\n        self.optsChanged(param, dict(limits=limits))\n\n\nclass SliderParameter(Parameter):\n    \"\"\"\n    ============== ========================================================\n    **Options**\n    limits         [start, stop] numbers\n    step:          Defaults to 1, the spacing between each slider tick\n    span:          Instead of limits + step, span can be set to specify\n                   the range of slider options (e.g. np.linspace(-pi, pi, 100))\n    format:        Format string to determine number of decimals to show, etc.\n                   Defaults to display based on span dtype\n    precision:     int number of decimals to keep for float tick spaces\n    ============== ========================================================\n    \"\"\"\n    itemClass = SliderParameterItem\n", "path": "pyqtgraph/parametertree/parameterTypes/slider.py"}]}