1

当我单击圆环图的切片时,我想获取饼切片的值。我们怎样才能实现它?我想将 slice 的值存储在一个变量中。请让我知道您的想法或建议。

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_())

4

1 回答 1

1

您必须使用发送press 的doubleClicked信号,并且从该 QPieSeries 中您可以提取所需的信息:QPieSeriesQPieSlice

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())
于 2020-08-06T22:54:21.377 回答