第5章 - 添加图表视图

表格是展示数据的好方法,但图表更好。为此,您需要QtCharts模块,它提供了多种类型的图表和选项,以图形方式表示数据。

绘图的占位符是一个QChartView,在该小部件中,您可以放置一个QChart。作为第一步,尝试仅包含此内容而不包含任何要绘制的数据。

对上一章中的main_widget.py进行以下高亮显示的更改,以添加QChartView:

 1from __future__ import annotations
 2
 3from PySide6.QtCore import QDateTime, Qt
 4from PySide6.QtGui import QPainter
 5from PySide6.QtWidgets import (QWidget, QHeaderView, QHBoxLayout, QTableView,
 6                               QSizePolicy)
 7from PySide6.QtCharts import QChart, QChartView, QLineSeries, QDateTimeAxis, QValueAxis
 8
 9from table_model import CustomTableModel
10
11
12class Widget(QWidget):
13    def __init__(self, data):
14        QWidget.__init__(self)
15
16        # Getting the Model
17        self.model = CustomTableModel(data)
18
19        # Creating a QTableView
20        self.table_view = QTableView()
21        self.table_view.setModel(self.model)
22
23        # QTableView Headers
24        self.horizontal_header = self.table_view.horizontalHeader()
25        self.vertical_header = self.table_view.verticalHeader()
26        self.horizontal_header.setSectionResizeMode(QHeaderView.ResizeToContents)
27        self.vertical_header.setSectionResizeMode(QHeaderView.ResizeToContents)
28        self.horizontal_header.setStretchLastSection(True)
29
30        # Creating QChart
31        self.chart = QChart()
32        self.chart.setAnimationOptions(QChart.AllAnimations)
33
34        # Creating QChartView
35        self.chart_view = QChartView(self.chart)
36        self.chart_view.setRenderHint(QPainter.Antialiasing)
37
38        # QWidget Layout
39        self.main_layout = QHBoxLayout()
40        size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
41
42        ## Left layout
43        size.setHorizontalStretch(1)
44        self.table_view.setSizePolicy(size)
45        self.main_layout.addWidget(self.table_view)
46
47        ## Right Layout
48        size.setHorizontalStretch(4)
49        self.chart_view.setSizePolicy(size)
50        self.main_layout.addWidget(self.chart_view)
51
52        # Set the layout to the QWidget
53        self.setLayout(self.main_layout)