Как изменить размер метки QPieSlice в QtChart

#python #python-3.x #pyqt #pyqt5 #pyqtchart

Вопрос:

Я попытался использовать slice.setLabelFont(шрифт), но он не работает, я прикрепил свой код ниже

 class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        #Load the UI Page
        THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
        my_file = os.path.join(THIS_FOLDER, 'main.ui')
        uic.loadUi(my_file, self)

        # changing the background color to cyan
        self.setStyleSheet("background-color: #363636;")
  
        # set the title
        self.setWindowTitle("Screen Time")

        # self.graphWidget = pg.PlotWidget()
        # self.setCentralWidget(self.graphWidget)

        font=QtGui.QFont()
        font.setPixelSize(20)
        font.setPointSize(20)
        

        series = QtChart.QPieSeries()
        series.setHoleSize(0.5)
        series.append("Example1 40%",40.0)
        
      
        slice = QtChart.QPieSlice()

        slice.setLabelFont(font)

        slice = series.append("Example1 30%",30.0)
        slice.setLabelVisible()
        
        series.append("Example1 30%",30.0)

        chart = QtChart.QChart()
        
        chart.addSeries(series)
        chart.setTitleFont(font)
        chart.setTitle('usage time')
        
        chart.setAnimationOptions(QtChart.QChart.SeriesAnimations)
        chart.setTheme(QtChart.QChart.ChartThemeDark)
        #chart.animation

        chart.setBackgroundBrush(QtGui.QBrush(QtGui.QColor("transparent")))
        chart.legend().setVisible(True)
        chartview = QtChart.QChartView(chart)
        chartview.setRenderHint(QtGui.QPainter.Antialiasing)

        self.chart_container.setStyleSheet("background-color: #363636;")

        self.chart_container.setContentsMargins(0, 0, 0, 0)
        lay = QtWidgets.QHBoxLayout(self.chart_container)
        lay.setContentsMargins(0, 0, 0, 0)
        lay.addWidget(chartview)
 

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

Ответ №1:

Есть две проблемы. Во-первых, вы вызываете setLabelFont QPieSlice, который никогда не добавляется в QPieSeries.

 slice = QtChart.QPieSlice() # this is never added to the series
slice.setLabelFont(font)

slice = series.append("Example1 30%",30.0) # creates and returns a new pie slice
slice.setLabelVisible()
 

И во-вторых, установка темы диаграммы QChart.ChartThemeDark изменит шрифт обратно на шрифт по умолчанию, поэтому он должен быть установлен перед шрифтом метки QPieSlice. Как упоминалось в документах:

Изменение темы приведет к перезаписи всех настроек, ранее применявшихся к серии.

 class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        #Load the UI Page
        THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
        my_file = os.path.join(THIS_FOLDER, 'main.ui')
        uic.loadUi(my_file, self)
        self.setStyleSheet("background-color: #363636;")
        self.setWindowTitle("Screen Time")

        chart = QtChart.QChart()
        chart.setTheme(QtChart.QChart.ChartThemeDark)

        font=QtGui.QFont()
        font.setPixelSize(20)
        font.setPointSize(20)
        
        series = QtChart.QPieSeries()
        series.setHoleSize(0.5)
        series.append("Example1 40%",40.0)
        
        slice = series.append("Example1 30%",30.0)
        slice.setLabelVisible()
        slice.setLabelFont(font)
        
        series.append("Example1 30%",30.0)
        chart.addSeries(series)
        
        chart.setTitleFont(font)
        chart.setTitle('usage time')
        chart.setAnimationOptions(QtChart.QChart.SeriesAnimations)
        chart.setBackgroundBrush(QtGui.QBrush(QtGui.QColor("transparent")))
        chart.legend().setVisible(True)
        chartview = QtChart.QChartView(chart)
        chartview.setRenderHint(QtGui.QPainter.Antialiasing)

        self.chart_container.setStyleSheet("background-color: #363636;")

        self.chart_container.setContentsMargins(0, 0, 0, 0)
        lay = QtWidgets.QHBoxLayout(self.chart_container)
        lay.setContentsMargins(0, 0, 0, 0)
        lay.addWidget(chartview)