Как получить значение кусочка пирога двойным щелчком в PyQtChart
Я хочу получить значение сегмента круговой диаграммы, когда я нажимаю на фрагмент кольцевой диаграммы. Как мы можем этого добиться? Я хочу сохранить значение среза в переменной. Пожалуйста, дайте мне знать ваши мысли или предложения.
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtChart import QChart, QChartView, QPieSeries, QPieSlice
from PyQt5.QtGui import QPainter, QPen, QFont
from PyQt5.QtCore import Qt
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("DonutChart Example")
self.setGeometry(100,100, 400,600)
self.create_donutchart()
def create_donutchart(self):
series = QPieSeries()
series.setHoleSize(0.35)
series.append("Protein 4.2%", 4.2)
slice = QPieSlice()
slice = series.append("Fat 15.6%", 15.6)
slice.setExploded()
slice.setLabelVisible()
series.append("Other 23.8%", 23.8);
series.append("Carbs 56.4%", 56.4);
chart = QChart()
chart.legend().hide()
chart.addSeries(series)
chart.setAnimationOptions(QChart.SeriesAnimations)
chart.setTitle("DonutChart Example")
chart.setTheme(QChart.ChartThemeBlueCerulean)
chartview = QChartView(chart)
chartview.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartview)
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec_())
1 ответ
Решение
Вы должны использовать doubleClicked
сигнал QPieSeries
что посылает прессованные QPieSlice
, и из этого QPieSeries вы можете извлечь необходимую информацию:
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("DonutChart Example")
self.setGeometry(100,100, 400,600)
self.create_donutchart()
def create_donutchart(self):
series = QPieSeries()
series.setHoleSize(0.35)
series.append("Protein 4.2%", 4.2)
slice = series.append("Fat 15.6%", 15.6)
slice.setExploded()
slice.setLabelVisible()
series.append("Other 23.8%", 23.8);
series.append("Carbs 56.4%", 56.4);
chart = QChart()
chart.legend().hide()
chart.addSeries(series)
chart.setAnimationOptions(QChart.SeriesAnimations)
chart.setTitle("DonutChart Example")
chart.setTheme(QChart.ChartThemeBlueCerulean)
chartview = QChartView(chart)
chartview.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartview)
series.doubleClicked.connect(self.handle_double_clicked)
def handle_double_clicked(self, slice):
print(slice.label(), slice.value())