首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PyqtChart中获取条形图的值

如何在PyqtChart中获取条形图的值
EN

Stack Overflow用户
提问于 2020-08-10 09:23:41
回答 1查看 248关注 0票数 0

我已经实现了一个条形图,现在想要在双击条形图时获得值。我知道槽和信号的概念,能够在双击时调用函数,但不确定应该使用哪个参数来获取值。代码如下:

代码语言:javascript
复制
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_())
EN

回答 1

Stack Overflow用户

发布于 2021-07-02 06:45:15

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

代码语言:javascript
复制
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_())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63332965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档