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

使用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()))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Logintern09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值