【问题标题】:How to get the Value from Bar Chart in PyqtChart如何从 PyqtChart 中的条形图中获取值
【发布时间】:2020-11-29 15:08:49
【问题描述】:

我已经实现了一个条形图,现在想在双击条形图时获取值。我了解插槽和信号概念,并且能够在双击时调用该函数,但不确定我应该使用什么参数来获取值。代码如下:

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow)
from PyQt5.QtChart import QChart, QChartView, QHorizontalBarSeries, QBarSet, QBarCategoryAxis, 
QValueAxis
from PyQt5.Qt import Qt 
from PyQt5.QtGui import QPainter
from PyQt5.QtChart import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(800, 600)

        set0 = QBarSet('A')
        set1 = QBarSet('B')
    

        set0.append([1, 2, 3, 4, 5, 6])
        set1.append([5, 0, 0, 4, 0, 7])

        series = QBarSeries()
        series.append(set0)
        series.append(set1)
    

        chart = QChart(
        chart.addSeries(series)
        chart.setTitle('ABC')

        chart.setAnimationOptions(QChart.SeriesAnimations)

        technology = ('Oracle', 'Teradata')

        axisY = QValueAxis()
        axisY.applyNiceNumbers()
        chart.addAxis(axisY, Qt.AlignLeft)
        series.attachAxis(axisY)

        axisX = QBarCategoryAxis()
        axisX.append(technology)
        chart.addAxis(axisX, Qt.AlignBottom)
        series.attachAxis(axisX)

    
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)

        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
        self.setCentralWidget(chartView)

        series.doubleClicked.connect(self.bar_double_clicked)


    def bar_double_clicked(self, axisX,technology):
        print(axisX )

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt5 qtcharts pyqtchart


    【解决方案1】:

    您必须使用索引和 QBarSet 来获取信息。

    import sys
    
    from PyQt5.QtCore import Qt
    from PyQt5.QtGui import QPainter
    from PyQt5.QtWidgets import QApplication, QMainWindow
    from PyQt5.QtChart import (
        QChart,
        QChartView,
        QBarSeries,
        QBarSet,
        QBarCategoryAxis,
        QValueAxis,
    )
    
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            self.resize(800, 600)
    
            set0 = QBarSet("A")
            set1 = QBarSet("B")
    
            set0.append([1, 2, 3, 4, 5, 6])
            set1.append([5, 0, 0, 4, 0, 7])
    
            series = QBarSeries()
            series.append(set0)
            series.append(set1)
    
            chart = QChart()
            chart.addSeries(series)
            chart.setTitle("ABC")
    
            chart.setAnimationOptions(QChart.SeriesAnimations)
    
            technologies = [f"technology-{i}" for i in range(6)]
    
            axisY = QValueAxis()
            axisY.applyNiceNumbers()
            chart.addAxis(axisY, Qt.AlignLeft)
            series.attachAxis(axisY)
    
            self.axis_x = QBarCategoryAxis()
            self.axis_x.append(technologies)
            chart.addAxis(self.axis_x, Qt.AlignBottom)
            series.attachAxis(self.axis_x)
    
            chart.legend().setVisible(True)
            chart.legend().setAlignment(Qt.AlignBottom)
    
            chartView = QChartView(chart)
            chartView.setRenderHint(QPainter.Antialiasing)
            self.setCentralWidget(chartView)
    
            series.doubleClicked.connect(self.bar_double_clicked)
    
        def bar_double_clicked(self, index, barset):
            print(barset.label(), barset.at(index), self.axis_x.categories()[index])
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 2021-04-26
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多