Как получить значение из гистограммы в PyqtChart
Я реализовал гистограмму и теперь хочу получать значение при двойном щелчке по панели. Я знаю о концепции слота и сигнала и могу вызвать функцию двойным щелчком, но не уверен, какой параметр мне следует использовать для получения значений. Вот код: ##############################################################################
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_())
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_())