Подсказки при наведении на область диаграммы круговой QtCharts

Можно ли средствами Qt сделать всплывающие подсказки (информацию о секторе диаграммы, как в легенде), которые будут появляться при наведении мыши на часть диаграммы?
И как сделать, чтобы менялся цвет сектора, на который наведена мышь?

Может быть, есть универсальный способ сделать это для любого вида диаграмм, а не только для круговой?


Ответы (1 шт):

Автор решения: S. Nick

Вы должны использовать сигнал hovered QPieSeries

void QPieSeries::hovered(QPieSlice *slice, bool state)

Этот сигнал испускается, когда указатель мыши находится над срезом, заданным срезом.

Когда мышь перемещается по срезу, состояние становится истинным, а когда мышь снова удаляется, становится ложным.

import sys
from PyQt5.Qt import *
from PyQt5.QtChart import QChart, QChartView, QPieSeries, QPieSlice


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("DonutChart hovered Example")
        self.resize(700,600)

        series = QPieSeries()
        series.setHoleSize(0.35)
        series.append("Белки 4.2%", 4.2)
        slice = series.append("Жиры 15.6%", 15.6)
        series.append("Other 23.8%", 23.8);
        series.append("Углеводы 56.4%", 56.4);

        chart = QChart()
        chart.legend().hide()
        chart.addSeries(series)

        chart.setAnimationOptions(QChart.SeriesAnimations)
        chart.setTitle("hovered Example")
        chart.setTheme(QChart.ChartThemeBlueCerulean)

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

        series.hovered.connect(self.handle_hovered)
        
    def handle_hovered(self, slice, state):
        print(slice.label(), slice.value(), state)
        
        if state:
            slice.setExploded(True)
            slice.setLabelVisible(True)
        else:
            slice.setExploded(False)
            slice.setLabelVisible(False)

        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())        

введите сюда описание изображения

→ Ссылка