#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)