返回
Qt编写可视化大屏电子看板系统29-模块7品质管理
后端
2024-02-04 19:55:12
一、前言
品质管理模块是在送检合格模块的基础上增加了统计而来,总共包括了三个子模块:品质占比、班组合格率、每日合格率统计,其中品质占比子模块采用饼图控件显示对应的百分比,不同百分比颜色不一样,这个饼图控件的代码与送检合格模块是一样的,只需要修改送检合格模块的数据库查询语句,将对应的合格率字段改成对应的不合格率字段即可。
二、品质占比
品质占比模块主要是统计各个产品的合格率,并将其以饼图的形式展示出来,不同合格率对应的颜色也不一样。
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界面设计
每日合格率