Как добавить подзаголовки в QtCharts? - PullRequest
2 голосов
/ 07 мая 2020

Мне нужно создать два графика (подзаголовки, синхронные) и установить размеры следующим образом:

  • верхний график составляет 75% от области вывода
  • и нижний график составляет 25% от высоты области вывода.

Примерно как на этом эскизе.

enter image description here

Одна диаграмма - это просто создать (код ниже). Но добавить второй подсюжет - не получается. Я попытался добавить его через QVBoxLayout (), но тоже потерпел неудачу.

Я нашел пример того, что необходимо, Как создать подзаголовок с помощью QCharts? но он не записан в Python (что вызывает проблемы при переводе на Python). Здесь https://doc.qt.io/qt-5/qchart.html#chartType -prop тоже нет, и его тоже нет в Python.

Как добавить подсюжет и с указанием размеров (в пикселей или в%)?

from random import uniform
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtChart import QChart, QChartView, QLineSeries



class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 100, 680, 500)
        self.create_linechart()
        self.show()

    def create_linechart(self):

        series = QLineSeries(self)
        for i in range(100):
            series.append(i, uniform(0, 10))

        chart = QChart()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chartview = QChartView(chart)
        self.setCentralWidget(chartview)


App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())

1 Ответ

4 голосов
/ 07 мая 2020

Вы должны создать 2 QChartView, так как в вашем коде вы создаете и устанавливаете его только как центральный виджет, тогда вы должны использовать QWidget в качестве контейнера и использовать QVBoxLayout для их добавления, для соотношения высоты вы должны установить коэффициент растяжения :

from random import uniform
import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtChart import QChart, QChartView, QLineSeries


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 100, 680, 500)
        view1 = self.create_linechart()
        view2 = self.create_linechart()

        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        lay = QVBoxLayout(central_widget)
        lay.addWidget(view1, stretch=3)
        lay.addWidget(view2, stretch=1)

    def create_linechart(self):
        series = QLineSeries()
        for i in range(100):
            series.append(i, uniform(0, 10))

        chart = QChart()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chartview = QChartView(chart)
        return chartview


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

enter image description here

...