diff options
Diffstat (limited to 'examples/graphs/3d/widgetgallery/bargraph.py')
-rw-r--r-- | examples/graphs/3d/widgetgallery/bargraph.py | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/examples/graphs/3d/widgetgallery/bargraph.py b/examples/graphs/3d/widgetgallery/bargraph.py new file mode 100644 index 000000000..822acb4a9 --- /dev/null +++ b/examples/graphs/3d/widgetgallery/bargraph.py @@ -0,0 +1,272 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +from graphmodifier import GraphModifier + +from PySide6.QtCore import QObject, Qt +from PySide6.QtGui import QFont +from PySide6.QtWidgets import (QButtonGroup, QCheckBox, QComboBox, QFontComboBox, + QLabel, QPushButton, QHBoxLayout, QSizePolicy, + QRadioButton, QSlider, QVBoxLayout, QWidget) +from PySide6.QtQuickWidgets import QQuickWidget +from PySide6.QtGraphs import (QAbstract3DGraph, QAbstract3DSeries, Q3DBars) + + +class BarGraph(QObject): + + def __init__(self, minimum_graph_size, maximum_graph_size): + super().__init__() + self._barsGraph = Q3DBars() + self._barsWidget = QWidget() + hLayout = QHBoxLayout(self._barsWidget) + self._barsGraph.setMinimumSize(minimum_graph_size) + self._barsGraph.setMaximumSize(maximum_graph_size) + self._barsGraph.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self._barsGraph.setFocusPolicy(Qt.StrongFocus) + self._barsGraph.setResizeMode(QQuickWidget.SizeRootObjectToView) + hLayout.addWidget(self._barsGraph, 1) + + vLayout = QVBoxLayout() + hLayout.addLayout(vLayout) + + themeList = QComboBox(self._barsWidget) + themeList.addItem("Qt") + themeList.addItem("Primary Colors") + themeList.addItem("Digia") + themeList.addItem("Stone Moss") + themeList.addItem("Army Blue") + themeList.addItem("Retro") + themeList.addItem("Ebony") + themeList.addItem("Isabelle") + themeList.setCurrentIndex(0) + + labelButton = QPushButton(self._barsWidget) + labelButton.setText("Change label style") + + smoothCheckBox = QCheckBox(self._barsWidget) + smoothCheckBox.setText("Smooth bars") + smoothCheckBox.setChecked(False) + + barStyleList = QComboBox(self._barsWidget) + barStyleList.addItem("Bar", QAbstract3DSeries.Mesh.Bar) + barStyleList.addItem("Pyramid", QAbstract3DSeries.Mesh.Pyramid) + barStyleList.addItem("Cone", QAbstract3DSeries.Mesh.Cone) + barStyleList.addItem("Cylinder", QAbstract3DSeries.Mesh.Cylinder) + barStyleList.addItem("Bevel bar", QAbstract3DSeries.Mesh.BevelBar) + barStyleList.addItem("Sphere", QAbstract3DSeries.Mesh.Sphere) + barStyleList.setCurrentIndex(4) + + cameraButton = QPushButton(self._barsWidget) + cameraButton.setText("Change camera preset") + + zoomToSelectedButton = QPushButton(self._barsWidget) + zoomToSelectedButton.setText("Zoom to selected bar") + + selectionModeList = QComboBox(self._barsWidget) + selectionModeList.addItem("None", QAbstract3DGraph.SelectionNone) + selectionModeList.addItem("Bar", QAbstract3DGraph.SelectionItem) + selectionModeList.addItem("Row", QAbstract3DGraph.SelectionRow) + sel = QAbstract3DGraph.SelectionItemAndRow + selectionModeList.addItem("Bar and Row", sel) + selectionModeList.addItem("Column", QAbstract3DGraph.SelectionColumn) + sel = QAbstract3DGraph.SelectionItemAndColumn + selectionModeList.addItem("Bar and Column", sel) + sel = QAbstract3DGraph.SelectionRowAndColumn + selectionModeList.addItem("Row and Column", sel) + sel = QAbstract3DGraph.SelectionItemRowAndColumn + selectionModeList.addItem("Bar, Row and Column", sel) + sel = QAbstract3DGraph.SelectionSlice | QAbstract3DGraph.SelectionRow + selectionModeList.addItem("Slice into Row", sel) + sel = QAbstract3DGraph.SelectionSlice | QAbstract3DGraph.SelectionItemAndRow + selectionModeList.addItem("Slice into Row and Item", sel) + sel = QAbstract3DGraph.SelectionSlice | QAbstract3DGraph.SelectionColumn + selectionModeList.addItem("Slice into Column", sel) + sel = (QAbstract3DGraph.SelectionSlice + | QAbstract3DGraph.SelectionItemAndColumn) + selectionModeList.addItem("Slice into Column and Item", sel) + sel = (QAbstract3DGraph.SelectionItemRowAndColumn + | QAbstract3DGraph.SelectionMultiSeries) + selectionModeList.addItem("Multi: Bar, Row, Col", sel) + sel = (QAbstract3DGraph.SelectionSlice + | QAbstract3DGraph.SelectionItemAndRow + | QAbstract3DGraph.SelectionMultiSeries) + selectionModeList.addItem("Multi, Slice: Row, Item", sel) + sel = (QAbstract3DGraph.SelectionSlice + | QAbstract3DGraph.SelectionItemAndColumn + | QAbstract3DGraph.SelectionMultiSeries) + selectionModeList.addItem("Multi, Slice: Col, Item", sel) + selectionModeList.setCurrentIndex(1) + + backgroundCheckBox = QCheckBox(self._barsWidget) + backgroundCheckBox.setText("Show background") + backgroundCheckBox.setChecked(False) + + gridCheckBox = QCheckBox(self._barsWidget) + gridCheckBox.setText("Show grid") + gridCheckBox.setChecked(True) + + seriesCheckBox = QCheckBox(self._barsWidget) + seriesCheckBox.setText("Show second series") + seriesCheckBox.setChecked(False) + + reverseValueAxisCheckBox = QCheckBox(self._barsWidget) + reverseValueAxisCheckBox.setText("Reverse value axis") + reverseValueAxisCheckBox.setChecked(False) + + reflectionCheckBox = QCheckBox(self._barsWidget) + reflectionCheckBox.setText("Show reflections") + reflectionCheckBox.setChecked(False) + + rotationSliderX = QSlider(Qt.Horizontal, self._barsWidget) + rotationSliderX.setTickInterval(30) + rotationSliderX.setTickPosition(QSlider.TicksBelow) + rotationSliderX.setMinimum(-180) + rotationSliderX.setValue(0) + rotationSliderX.setMaximum(180) + rotationSliderY = QSlider(Qt.Horizontal, self._barsWidget) + rotationSliderY.setTickInterval(15) + rotationSliderY.setTickPosition(QSlider.TicksAbove) + rotationSliderY.setMinimum(-90) + rotationSliderY.setValue(0) + rotationSliderY.setMaximum(90) + + fontSizeSlider = QSlider(Qt.Horizontal, self._barsWidget) + fontSizeSlider.setTickInterval(10) + fontSizeSlider.setTickPosition(QSlider.TicksBelow) + fontSizeSlider.setMinimum(1) + fontSizeSlider.setValue(30) + fontSizeSlider.setMaximum(100) + + fontList = QFontComboBox(self._barsWidget) + fontList.setCurrentFont(QFont("Times New Roman")) + + shadowQuality = QComboBox(self._barsWidget) + shadowQuality.addItem("None") + shadowQuality.addItem("Low") + shadowQuality.addItem("Medium") + shadowQuality.addItem("High") + shadowQuality.addItem("Low Soft") + shadowQuality.addItem("Medium Soft") + shadowQuality.addItem("High Soft") + shadowQuality.setCurrentIndex(5) + + rangeList = QComboBox(self._barsWidget) + rangeList.addItem("2015") + rangeList.addItem("2016") + rangeList.addItem("2017") + rangeList.addItem("2018") + rangeList.addItem("2019") + rangeList.addItem("2020") + rangeList.addItem("2021") + rangeList.addItem("2022") + rangeList.addItem("All") + rangeList.setCurrentIndex(8) + + axisTitlesVisibleCB = QCheckBox(self._barsWidget) + axisTitlesVisibleCB.setText("Axis titles visible") + axisTitlesVisibleCB.setChecked(True) + + axisTitlesFixedCB = QCheckBox(self._barsWidget) + axisTitlesFixedCB.setText("Axis titles fixed") + axisTitlesFixedCB.setChecked(True) + + axisLabelRotationSlider = QSlider(Qt.Horizontal, self._barsWidget) + axisLabelRotationSlider.setTickInterval(10) + axisLabelRotationSlider.setTickPosition(QSlider.TicksBelow) + axisLabelRotationSlider.setMinimum(0) + axisLabelRotationSlider.setValue(30) + axisLabelRotationSlider.setMaximum(90) + + modeGroup = QButtonGroup(self._barsWidget) + modeWeather = QRadioButton("Temperature Data", self._barsWidget) + modeWeather.setChecked(True) + modeCustomProxy = QRadioButton("Custom Proxy Data", self._barsWidget) + modeGroup.addButton(modeWeather) + modeGroup.addButton(modeCustomProxy) + + vLayout.addWidget(QLabel("Rotate horizontally")) + vLayout.addWidget(rotationSliderX, 0, Qt.AlignTop) + vLayout.addWidget(QLabel("Rotate vertically")) + vLayout.addWidget(rotationSliderY, 0, Qt.AlignTop) + vLayout.addWidget(labelButton, 0, Qt.AlignTop) + vLayout.addWidget(cameraButton, 0, Qt.AlignTop) + vLayout.addWidget(zoomToSelectedButton, 0, Qt.AlignTop) + vLayout.addWidget(backgroundCheckBox) + vLayout.addWidget(gridCheckBox) + vLayout.addWidget(smoothCheckBox) + vLayout.addWidget(reflectionCheckBox) + vLayout.addWidget(seriesCheckBox) + vLayout.addWidget(reverseValueAxisCheckBox) + vLayout.addWidget(axisTitlesVisibleCB) + vLayout.addWidget(axisTitlesFixedCB) + vLayout.addWidget(QLabel("Show year")) + vLayout.addWidget(rangeList) + vLayout.addWidget(QLabel("Change bar style")) + vLayout.addWidget(barStyleList) + vLayout.addWidget(QLabel("Change selection mode")) + vLayout.addWidget(selectionModeList) + vLayout.addWidget(QLabel("Change theme")) + vLayout.addWidget(themeList) + vLayout.addWidget(QLabel("Adjust shadow quality")) + vLayout.addWidget(shadowQuality) + vLayout.addWidget(QLabel("Change font")) + vLayout.addWidget(fontList) + vLayout.addWidget(QLabel("Adjust font size")) + vLayout.addWidget(fontSizeSlider) + vLayout.addWidget(QLabel("Axis label rotation")) + vLayout.addWidget(axisLabelRotationSlider, 0, Qt.AlignTop) + vLayout.addWidget(modeWeather, 0, Qt.AlignTop) + vLayout.addWidget(modeCustomProxy, 1, Qt.AlignTop) + + self._modifier = GraphModifier(self._barsGraph, self) + + rotationSliderX.valueChanged.connect(self._modifier.rotateX) + rotationSliderY.valueChanged.connect(self._modifier.rotateY) + + labelButton.clicked.connect(self._modifier.changeLabelBackground) + cameraButton.clicked.connect(self._modifier.changePresetCamera) + zoomToSelectedButton.clicked.connect(self._modifier.zoomToSelectedBar) + + backgroundCheckBox.stateChanged.connect(self._modifier.setBackgroundEnabled) + gridCheckBox.stateChanged.connect(self._modifier.setGridEnabled) + smoothCheckBox.stateChanged.connect(self._modifier.setSmoothBars) + seriesCheckBox.stateChanged.connect(self._modifier.setSeriesVisibility) + reverseValueAxisCheckBox.stateChanged.connect(self._modifier.setReverseValueAxis) + reflectionCheckBox.stateChanged.connect(self._modifier.setReflection) + + self._modifier.backgroundEnabledChanged.connect(backgroundCheckBox.setChecked) + self._modifier.gridEnabledChanged.connect(gridCheckBox.setChecked) + + rangeList.currentIndexChanged.connect(self._modifier.changeRange) + + barStyleList.currentIndexChanged.connect(self._modifier.changeStyle) + + selectionModeList.currentIndexChanged.connect(self._modifier.changeSelectionMode) + + themeList.currentIndexChanged.connect(self._modifier.changeTheme) + + shadowQuality.currentIndexChanged.connect(self._modifier.changeShadowQuality) + + self._modifier.shadowQualityChanged.connect(shadowQuality.setCurrentIndex) + self._barsGraph.shadowQualityChanged.connect(self._modifier.shadowQualityUpdatedByVisual) + + fontSizeSlider.valueChanged.connect(self._modifier.changeFontSize) + fontList.currentFontChanged.connect(self._modifier.changeFont) + + self._modifier.fontSizeChanged.connect(fontSizeSlider.setValue) + self._modifier.fontChanged.connect(fontList.setCurrentFont) + + axisTitlesVisibleCB.stateChanged.connect(self._modifier.setAxisTitleVisibility) + axisTitlesFixedCB.stateChanged.connect(self._modifier.setAxisTitleFixed) + axisLabelRotationSlider.valueChanged.connect(self._modifier.changeLabelRotation) + + modeWeather.toggled.connect(self._modifier.setDataModeToWeather) + modeCustomProxy.toggled.connect(self._modifier.setDataModeToCustom) + modeWeather.toggled.connect(seriesCheckBox.setEnabled) + modeWeather.toggled.connect(rangeList.setEnabled) + modeWeather.toggled.connect(axisTitlesVisibleCB.setEnabled) + modeWeather.toggled.connect(axisTitlesFixedCB.setEnabled) + modeWeather.toggled.connect(axisLabelRotationSlider.setEnabled) + + def barsWidget(self): + return self._barsWidget |