返回

Qt编写可视化大屏电子看板系统29-模块7品质管理

后端

一、前言

品质管理模块是在送检合格模块的基础上增加了统计而来,总共包括了三个子模块:品质占比、班组合格率、每日合格率统计,其中品质占比子模块采用饼图控件显示对应的百分比,不同百分比颜色不一样,这个饼图控件的代码与送检合格模块是一样的,只需要修改送检合格模块的数据库查询语句,将对应的合格率字段改成对应的不合格率字段即可。

二、品质占比

品质占比模块主要是统计各个产品的合格率,并将其以饼图的形式展示出来,不同合格率对应的颜色也不一样。

1. 数据库设计

品质占比模块需要用到两个数据库表:

  • 产品表:存储产品信息,包括产品名称、产品编号等。
  • 送检合格表:存储送检合格信息,包括产品编号、送检数量、合格数量等。

2. Qt界面设计

品质占比模块的Qt界面设计非常简单,主要包括一个饼图控件和一个标签控件。饼图控件用于展示产品的合格率,标签控件用于显示产品名称。

3. Qt代码实现

品质占比模块的Qt代码实现如下:

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton

class QualityRatioWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("品质占比")
        self.resize(600, 400)

        self.pie_chart = QPieSeries()
        self.pie_chart.setHoleSize(0.3)

        self.pie_chart_view = QPieChart()
        self.pie_chart_view.addSeries(self.pie_chart)
        self.pie_chart_view.setAnimationOptions(QPieChart.AllAnimations)

        self.label = QLabel()
        self.label.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.pie_chart_view)
        self.layout.addWidget(self.label)

        self.setLayout(self.layout)

        self.init_data()

    def init_data(self):
        # 从数据库中查询数据
        data = [
            ("产品1", 80),
            ("产品2", 90),
            ("产品3", 70),
        ]

        # 将数据添加到饼图中
        for name, value in data:
            slice = QPieSlice()
            slice.setValue(value)
            slice.setLabel(name)
            self.pie_chart.append(slice)

        # 设置饼图的标签字体大小
        self.pie_chart.setLabelsVisible(True)
        self.pie_chart.setLabelsPosition(QPieSlice.LabelOutside)
        font = QFont("Arial", 12)
        self.pie_chart.setLabelsFont(font)

        # 设置饼图的颜色
        colors = [QColor(255, 0, 0), QColor(0, 255, 0), QColor(0, 0, 255)]
        for i, slice in enumerate(self.pie_chart.slices()):
            slice.setBrush(colors[i])

        # 设置饼图的标题
        self.pie_chart_view.setTitle("产品合格率")

        # 设置饼图的背景色
        self.pie_chart_view.setBackgroundVisible(False)

    def paintEvent(self, event):
        super().paintEvent(event)

        painter = QPainter(self)
        painter.setPen(QPen(QColor(0, 0, 0), 2))
        painter.drawLine(0, self.height() - 1, self.width(), self.height() - 1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = QualityRatioWidget()
    widget.show()
    sys.exit(app.exec_())

三、班组合格率

班组合格率模块主要是统计各个班组的合格率,并将其以柱状图的形式展示出来。

1. 数据库设计

班组合格率模块需要用到两个数据库表:

  • 班组表:存储班组信息,包括班组名称、班组编号等。
  • 送检合格表:存储送检合格信息,包括班组编号、送检数量、合格数量等。

2. Qt界面设计

班组合格率模块的Qt界面设计非常简单,主要包括一个柱状图控件和一个标签控件。柱状图控件用于展示班组的合格率,标签控件用于显示班组名称。

3. Qt代码实现

班组合格率模块的Qt代码实现如下:

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton

class GroupQualifiedRateWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("班组合格率")
        self.resize(600, 400)

        self.bar_chart = QBarSeries()

        self.bar_chart_view = QBarChart()
        self.bar_chart_view.addSeries(self.bar_chart)
        self.bar_chart_view.setAnimationOptions(QBarSeries.AllAnimations)

        self.label = QLabel()
        self.label.setAlignment(Qt.AlignCenter)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.bar_chart_view)
        self.layout.addWidget(self.label)

        self.setLayout(self.layout)

        self.init_data()

    def init_data(self):
        # 从数据库中查询数据
        data = [
            ("班组1", 80),
            ("班组2", 90),
            ("班组3", 70),
        ]

        # 将数据添加到柱状图中
        for name, value in data:
            bar = QBarSet(name)
            bar.append(value)
            self.bar_chart.append(bar)

        # 设置柱状图的标签字体大小
        self.bar_chart.setLabelsVisible(True)
        self.bar_chart.setLabelsPosition(QBarSet.LabelInsideEnd)
        font = QFont("Arial", 12)
        self.bar_chart.setLabelsFont(font)

        # 设置柱状图的颜色
        colors = [QColor(255, 0, 0), QColor(0, 255, 0), QColor(0, 0, 255)]
        for i, bar in enumerate(self.bar_chart.barSets()):
            bar.setColor(colors[i])

        # 设置柱状图的标题
        self.bar_chart_view.setTitle("班组合格率")

        # 设置柱状图的背景色
        self.bar_chart_view.setBackgroundVisible(False)

    def paintEvent(self, event):
        super().paintEvent(event)

        painter = QPainter(self)
        painter.setPen(QPen(QColor(0, 0, 0), 2))
        painter.drawLine(0, self.height() - 1, self.width(), self.height() - 1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = GroupQualifiedRateWidget()
    widget.show()
    sys.exit(app.exec_())

四、每日合格率统计

每日合格率统计模块主要是统计每天的合格率,并将其以折线图的形式展示出来。

1. 数据库设计

每日合格率统计模块需要用到两个数据库表:

  • 日期表:存储日期信息,包括日期、星期等。
  • 送检合格表:存储送检合格信息,包括日期、送检数量、合格数量等。

2. Qt界面设计

每日合格率