aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorKeith Kyzivat <keith.kyzivat@qt.io>2022-11-10 14:27:53 -0500
committerKeith Kyzivat <keith.kyzivat@qt.io>2023-02-01 12:22:12 -0500
commit945424bd2e94673a465460c4c4a32b7738b912e0 (patch)
tree59785added1e09704bf09b49e89c9c6a65584772 /examples
parent3b3ea84dc2d7bc4967096e046bd1951b03a7bc06 (diff)
PySide6-examples: Improve charts selected point configuration example
Update pointconfiguration example to be more pythonic. Note that this example requires Qt 6.5. Task-number: PYSIDE-841 Change-Id: I0dc63f5df4c94af1ef2654ed023b9eb86d34a0ae Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/charts/pointconfiguration/chartwindow.py145
-rw-r--r--examples/charts/pointconfiguration/doc/pointconfiguration.rst28
2 files changed, 84 insertions, 89 deletions
diff --git a/examples/charts/pointconfiguration/chartwindow.py b/examples/charts/pointconfiguration/chartwindow.py
index 93acca506..055802b9f 100644
--- a/examples/charts/pointconfiguration/chartwindow.py
+++ b/examples/charts/pointconfiguration/chartwindow.py
@@ -2,60 +2,62 @@
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
"""PySide6 port of the Selected Point Configuration Example from Qt 6.5"""
-from PySide6.QtCore import QObject, QPointF, Slot
+from PySide6.QtCore import QPointF, Slot
from PySide6.QtGui import QColor, QIcon, QPainter
from PySide6.QtWidgets import QMainWindow, QLineEdit, QLabel, QComboBox
from PySide6.QtWidgets import QCheckBox, QWidget, QGridLayout, QHBoxLayout
from PySide6.QtCharts import QLineSeries, QXYSeries, QChart, QChartView
+from typing import Union
PointConfig = QXYSeries.PointConfiguration
class ChartWindow(QMainWindow):
- def __init__(self, parent:QObject=None ):
+ def __init__(self, parent=None):
super().__init__(parent)
- tr=self.tr
- self.setWindowTitle(tr("Chart"))
+ self.setWindowTitle("Chart")
self._series = QLineSeries(self)
- self._series.setName(tr("Customized series"))
+ self._series.setName("Customized series")
self._series.setPointsVisible(True)
self._series.append([QPointF(0, 7), QPointF(2, 4),
- QPointF(3, 5), QPointF(7, 4), QPointF(10, 5),
- QPointF(11, 1), QPointF(13, 3), QPointF(17, 6),
- QPointF(18, 3), QPointF(20, 2)])
+ QPointF(3, 5), QPointF(7, 4),
+ QPointF(10, 5), QPointF(11, 1),
+ QPointF(13, 3), QPointF(17, 6),
+ QPointF(18, 3), QPointF(20, 2)])
- selected_point_index_label = QLabel(tr("Selected Point: "))
+ selected_point_index_label = QLabel("Selected Point: ")
self._selected_point_index_lineedit = QLineEdit()
self._selected_point_index_lineedit.setReadOnly(True)
self._selected_point_index_lineedit.setStyleSheet(
"background-color: rgba(0, 0, 0, 0); border: 0px")
- color_label = QLabel(tr("Color: "))
+ color_label = QLabel("Color: ")
self._color_combobox = QComboBox()
- color_strings = ["red", "orange", "yellow", "green", "blue", "indigo", "violet", "black"]
- tr_color_strings = [tr("red"), tr("orange"), tr("yellow"), tr("green"), tr("blue"),
- tr("indigo"), tr("violet"), tr("black")]
- for i, color_str in enumerate(color_strings):
- self._color_combobox.addItem(QIcon(), tr_color_strings[i], QColor(color_str))
+ color_strings = ["red", "orange", "yellow", "green", "blue",
+ "indigo", "violet", "black"]
+ for color_str in color_strings:
+ self._color_combobox.addItem(QIcon(), color_str, QColor(color_str))
- size_label = QLabel(tr("Size: "))
+ size_label = QLabel("Size: ")
self._size_combobox = QComboBox()
for size in [2, 3, 4, 6, 8, 10, 12, 15]:
self._size_combobox.addItem(QIcon(), str(size), size)
- label_visibility_label = QLabel(tr("Label Visibility: "))
+ label_visibility_label = QLabel("Label Visibility: ")
self._label_visibility_checkbox = QCheckBox()
- custom_label_label = QLabel(tr("Custom Label: "))
+ custom_label_label = QLabel("Custom Label: ")
self._custom_label_lineedit = QLineEdit()
self._series.clicked.connect(self._select_point)
self._color_combobox.activated.connect(self._set_color)
self._size_combobox.activated.connect(self._set_size)
- self._label_visibility_checkbox.clicked.connect(self._set_label_visibility)
- self._custom_label_lineedit.editingFinished.connect(self._set_custom_label)
+ label_vis_checkbox = self._label_visibility_checkbox
+ label_vis_checkbox.clicked.connect(self._set_label_visibility)
+ clabel_lineedit = self._custom_label_lineedit
+ clabel_lineedit.editingFinished.connect(self._set_custom_label)
self._chart = QChart()
self._chart.addSeries(self._series)
@@ -69,19 +71,19 @@ class ChartWindow(QMainWindow):
control_layout.setColumnStretch(1, 1)
control_layout.addWidget(selected_point_index_label, 0, 0)
- control_layout.addWidget(self._selected_point_index_lineedit, 0 , 1)
+ control_layout.addWidget(self._selected_point_index_lineedit, 0, 1)
control_layout.addWidget(color_label, 1, 0)
- control_layout.addWidget(self._color_combobox, 1 , 1)
+ control_layout.addWidget(self._color_combobox, 1, 1)
control_layout.addWidget(size_label, 2, 0)
- control_layout.addWidget(self._size_combobox, 2 , 1)
+ control_layout.addWidget(self._size_combobox, 2, 1)
control_layout.addWidget(label_visibility_label, 3, 0)
- control_layout.addWidget(self._label_visibility_checkbox, 3 , 1, 1, 2)
+ control_layout.addWidget(self._label_visibility_checkbox, 3, 1, 1, 2)
control_layout.addWidget(custom_label_label, 4, 0)
- control_layout.addWidget(self._custom_label_lineedit, 4 , 1)
+ control_layout.addWidget(self._custom_label_lineedit, 4, 1)
main_widget = QWidget(self)
main_layout = QHBoxLayout(main_widget)
@@ -90,68 +92,65 @@ class ChartWindow(QMainWindow):
main_layout.addWidget(control_widget)
self.setCentralWidget(main_widget)
- self._series.clicked.emit(self._series.at(4))
+ self._select_point(4)
@Slot(QPointF)
- def _select_point(self, point: QPointF):
+ def _select_point(self, point: Union[QPointF, int]):
try:
- index = self._series.points().index(point.toPoint())
- self._series.deselectAllPoints()
- self._series.selectPoint(index)
- self._selectedPointIndex = index
- self._selectedPointConfig = self._series.pointConfiguration(index)
- selected_point = self._series.at(index)
- self._selected_point_index_lineedit.setText("(" + str(selected_point.x()) + ", " +
- str(selected_point.y()) + ")")
- config = self._series.pointConfiguration(index)
-
- try:
- color = config[PointConfig.Color]
- except KeyError:
- color = self._series.color()
- if self._color_combobox.findData(color) < 0:
- self._color_combobox.addItem(color.name(), color)
- self._color_combobox.setCurrentIndex(self._color_combobox.findData(color))
-
- try:
- size = config[PointConfig.Size]
- except KeyError:
- size = self._series.markerSize()
- if self._size_combobox.findData(size) < 0:
- self._size_combobox.addItem(str(size), size)
- self._size_combobox.setCurrentIndex(self._size_combobox.findData(size))
-
- try:
- labelVisibility = config[PointConfig.LabelVisibility]
- except KeyError:
- labelVisibility = self._series.pointLabelsVisible()
- self._label_visibility_checkbox.setChecked(labelVisibility)
-
- try:
- customLabel = config[PointConfig.LabelFormat]
- except KeyError:
- customLabel = ""
- self._custom_label_lineedit.setText(customLabel)
+ index = (self._series.points().index(point.toPoint()) if
+ isinstance(point, QPointF) else point)
except ValueError:
# Do nothing if the place that was clicked on wasn't a point.
- pass
+ return
+
+ self._series.deselectAllPoints()
+ self._series.selectPoint(index)
+ self._selectedPointIndex = index
+ self._selectedPointConfig = self._series.pointConfiguration(index)
+ selected_point = self._series.at(index)
+ selected_index_lineedit = self._selected_point_index_lineedit
+ selected_index_lineedit.setText("(" + str(selected_point.x()) + ", " +
+ str(selected_point.y()) + ")")
+ config = self._series.pointConfiguration(index)
+
+ color = config.get(PointConfig.Color) or self._series.color()
+ size = config.get(PointConfig.Size) or self._series.markerSize()
+ labelVisibility = (config.get(PointConfig.LabelVisibility) or
+ self._series.pointLabelsVisible())
+ customLabel = config.get(PointConfig.LabelFormat) or ""
+
+ combobox_value_list = [
+ (self._color_combobox, color.name(), color),
+ (self._size_combobox, str(size), size)
+ ]
+ for box, value_str, value in combobox_value_list:
+ if box.findData(value) < 0:
+ box.addItem(value_str, value)
+ box.setCurrentIndex(box.findData(value))
+
+ self._label_visibility_checkbox.setChecked(labelVisibility)
+ self._custom_label_lineedit.setText(customLabel)
@Slot(int)
def _set_color(self, index: int):
- self._selectedPointConfig[PointConfig.Color] = self._color_combobox.currentData()
- self._series.setPointConfiguration(self._selectedPointIndex, self._selectedPointConfig)
+ spc = self._selectedPointConfig
+ spc[PointConfig.Color] = self._color_combobox.currentData()
+ self._series.setPointConfiguration(self._selectedPointIndex, spc)
@Slot(int)
def _set_size(self, index: int):
- self._selectedPointConfig[PointConfig.Size] = self._size_combobox.currentData()
- self._series.setPointConfiguration(self._selectedPointIndex, self._selectedPointConfig)
+ spc = self._selectedPointConfig
+ spc[PointConfig.Size] = self._size_combobox.currentData()
+ self._series.setPointConfiguration(self._selectedPointIndex, spc)
@Slot(bool)
def _set_label_visibility(self, checked: bool):
- self._selectedPointConfig[PointConfig.LabelVisibility] = checked
- self._series.setPointConfiguration(self._selectedPointIndex, self._selectedPointConfig)
+ spc = self._selectedPointConfig
+ spc[PointConfig.LabelVisibility] = checked
+ self._series.setPointConfiguration(self._selectedPointIndex, spc)
@Slot()
def _set_custom_label(self):
- self._selectedPointConfig[PointConfig.LabelFormat] = self._custom_label_lineedit.text()
- self._series.setPointConfiguration(self._selectedPointIndex, self._selectedPointConfig)
+ spc = self._selectedPointConfig
+ spc[PointConfig.LabelFormat] = self._custom_label_lineedit.text()
+ self._series.setPointConfiguration(self._selectedPointIndex, spc)
diff --git a/examples/charts/pointconfiguration/doc/pointconfiguration.rst b/examples/charts/pointconfiguration/doc/pointconfiguration.rst
index 63cade471..9eb42ed57 100644
--- a/examples/charts/pointconfiguration/doc/pointconfiguration.rst
+++ b/examples/charts/pointconfiguration/doc/pointconfiguration.rst
@@ -31,8 +31,8 @@ Create a subclass of :py:`QMainWindow` to contain the chart and controls.
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
- :lineno-start: 15
- :lines: 15-17
+ :lineno-start: 16
+ :lines: 16-18
Create a line series
~~~~~~~~~~~~~~~~~~~~
@@ -43,7 +43,7 @@ visible.
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
:lineno-start: 20
- :lines: 20-27
+ :lines: 20-28
Create the point configuration controls
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -62,8 +62,8 @@ Now, create controls to configure the color, size, and label visibility attribut
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
- :lineno-start: 29
- :lines: 29-52
+ :lineno-start: 31
+ :lines: 31-52
Populate the controls upon selecting a point
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -87,8 +87,8 @@ look up the values in :py:`PointConfigurations`, and update the checkbox and lin
:lines: 54
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
- :lineno-start: 95
- :lines: 95-137
+ :lineno-start: 97
+ :lines: 97-132
Provide the logic to configure the selected point
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -102,11 +102,11 @@ value that is associated with the control, to the :py:`m_selectedPointConfig` an
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
:lineno-start: 55
- :lines: 55-58
+ :lines: 55-60
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
- :lineno-start: 139
- :lines: 139-157
+ :lineno-start: 140
+ :lines: 140-156
Create the chart and lay out the controls
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -116,12 +116,8 @@ window, and select an initial point.
.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
:linenos:
- :lineno-start: 60
- :lines: 60-93
-.. literalinclude:: ../../../../examples/charts/pointconfiguration/chartwindow.py
- :linenos:
- :lineno-start: 159
- :lines: 159-163
+ :lineno-start: 62
+ :lines: 62-95
In our entrypoint file `pointconfiguration.py`, instantiate the :py:`ChartWindow`, resize it, show
it, and start the event loop.