PyQt5中建立柱状图并刷新柱状图数据

作者 : admin 本文共2439个字,预计阅读时间需要7分钟 发布时间: 2024-06-10 共3人阅读

使用Qt Designer工具搭建界面时,在适当位置预留一个verticalLayout垂直布局控件,用于放置代码生成的上下两个柱状图。新建柱状图的代码如下:

class mainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self):
        super(mainWindow, self).__init__()
        self.setupUi(self)  # 初始化窗口

        self.tabWidget.setCurrentIndex(0)  # 界面显示第一个tab

        # 新建柱状图
        self.chartView_1 = self.gen_chart()
        self.verticalLayout.addWidget(self.chartView_1)
        self.chartView_2 = self.gen_chart()
        self.verticalLayout.addWidget(self.chartView_2)
        self.setLayout(self.verticalLayout)
 def gen_chart(self):
        # 新建柱状图
        chart = QChart()
        barSeries = QBarSeries()  # 竖向柱状图
        chartView = QChartView()
        valueAxisY = QValueAxis()
        barCategorAxisX = QBarCategoryAxis()
        chart.setAnimationOptions(QChart.AllAnimations)
        chart.setAnimationEasingCurve(QEasingCurve.OutBack)
        set0 = QBarSet("第一季度")
        set1 = QBarSet("第二季度")
        set2 = QBarSet("第三季度")
        set0.append(0)
        set1.append(0)
        set2.append(0)
        barCategorAxisX.append(["第一季度", "第二季度", "第三季度"])
        barSeries.append(set0)
        barSeries.append(set1)
        barSeries.append(set2)
        barSeries.setBarWidth(0.8)
        barSeries.setLabelsVisible(True)
        barSeries.setLabelsAngle(75.0)
        barSeries.setLabelsPrecision(3)
        valueAxisY.setRange(0, 10)
        chart.setTitle("季度报表数据")
        chart.setAxisX(barCategorAxisX)
        chart.setAxisY(valueAxisY)
        chart.addSeries(barSeries)
        chartView.setChart(chart)
        return chartView

上位机界面计算过程中实时更新计算结果到柱状图,柱状图数据更新的代码如下,函数update_bar_chart()的输入参数chart_index用于区分在verticalLayout垂直布局控件中是第几个添加到布局的柱状图控件:

      # 更新柱状图的数据
      verticalLayout_name = self.verticalLayout
      new_data = [('第一季度', float(self.output_dict["第一季度"][index].text())),
                  ('第二季度', data_dict["第二季度"]),
                  ('第三季度', data_dict["第三季度"])]
      self.update_bar_chart(new_data, 0, verticalLayout_name)
 def update_bar_chart(self, new_data: list, chart_index: int, verticalLayout_name):
        try:
            # 获取verticalLayout中的图表
            chart = verticalLayout_name.itemAt(chart_index).widget().chart()
            # 清除旧数据
            chart.removeAllSeries()
            # 添加新数据
            barSeries = QBarSeries()  # 竖向柱状图
            valueAxisY = QValueAxis()
            barCategorAxisX = QBarCategoryAxis()
            value_list = []
            for add_list in new_data:
                set0 = QBarSet(add_list[0])
                set0.append(add_list[1])
                barSeries.append(set0)
                value_list.append(add_list[1])
            barSeries.setBarWidth(0.8)
            barSeries.setLabelsVisible(True)
            barSeries.setLabelsAngle(75.0)
            barSeries.setLabelsPrecision(3)
            valueAxisY.setRange(min(value_list), max(value_list))
            valueAxisY.setLabelFormat('%.2f')  # %.2f设置了Y轴刻度标签的格式为保留两位小数
            chart.setTitle("季度报表数据")
            chart.setAxisX(barCategorAxisX)
            chart.setAxisY(valueAxisY)
            chart.addSeries(barSeries)
            chart.setAnimationOptions(QChart.AllAnimations)
            chart.setAnimationEasingCurve(QEasingCurve.OutBack)
        except:
            logger.error("更新柱状图报错 {}".format(traceback.format_exc()))
本站无任何商业行为
个人在线分享 » PyQt5中建立柱状图并刷新柱状图数据
E-->