草庐IT

基于Python的人脸识别课堂系统(毕设)——附录上

王.王. 2025-07-09 原文

本文章承接《基于Python的人脸识别课堂考勤系统(毕设)》,填坑上篇文章遗留的代码部分。因为项目分的模块比较多,再加上本人能力有限,所以代码过于臃肿还存在许多优化的地方。同样本篇文章也仅适用于小白,零基础人群。

PS:每个文件之中代码都已经区分开来,可以对照左侧目录部分实现快速预览!

       由于代码过于多我这里分成上,下两个部分来发布吧!

一、主文件

import os
import sys
import random
import pymysql
import cv2
import numpy as np
from math import pi
from matplotlib import pyplot as plt
from PIL import Image
from decimal import Decimal
from cv2 import CascadeClassifier,face
from PyQt5.QtWidgets import QLineEdit, QMessageBox
from ui_1jinru import Ui_MainWindow as jinru_Ui
from ui_2SingIn import Ui_MainWindow as singin_ui
from ui_3register import Ui_MainWindow as registerone_ui
from ui_4regsiter import Ui_MainWindow as registertwo_ui
from ui_5main import Ui_MainWindow as main_ui
from ui_6punch_the_clock import Ui_MainWindow as punch_ui
from ui_7collection import Ui_MainWindow as collection_ui
from ui_8feedback import Ui_MainWindow as feedback_ui
from ui_9random import Ui_MainWindow as random_ui
from ui_10_useguide import Ui_MainWindow as use_ui
from ui_11financialmedia import Ui_MainWindow as financialmedia_ui
from ui_12financialmedia import Ui_MainWindow as financialmediatwo_ui
from ui_13datawarehousing import Ui_MainWindow as data_ui
from ui_14accountwarehousing import Ui_MainWindow as caccount_ui
from ui_15dataanalysis import Ui_MainWindow as dataanalysis_ui
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QTimer,QDateTime
id_face = []
checklist = []
check_tlist = []
# 进入窗口
class jinruWindow(QtWidgets.QMainWindow,  jinru_Ui):
    # 登录页面跳转信号
    switch_singin = QtCore.pyqtSignal()
    def __init__(self):
        super(jinruWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.staraButton.clicked.connect(self.gosingin)
    def gosingin(self):
        self.switch_singin.emit()

# 登录窗口
class singinWindow(QtWidgets.QMainWindow,  singin_ui):
    switch_main = QtCore.pyqtSignal()  # 主界面跳转信号
    switch_registerone = QtCore.pyqtSignal()  # 注册页面_1跳转信号
    def __init__(self):
        super(singinWindow, self).__init__()
        self.setupUi(self)
        self.initUI()
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.regButton.clicked.connect(self.goregisterone)

    def initUI(self):
        self.usernametext.setFocus()
        self.usernametext.setPlaceholderText("请输入账户名")  # 提示信息
        self.posswordtext.setPlaceholderText("请输入密码")
        self.posswordtext.setEchoMode(QLineEdit.Password)  # 密码隐藏
        self.loginButton.clicked.connect(self.Check)

    def Check(self):
        user = str(self.usernametext.text())
        pwd = str(self.posswordtext.text())
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql = 'SELECT t_user,t_pwd FROM teacher'
        cursor.execute(sql)
        data = cursor.fetchall()
        cursor.close()
        db.close()
        i=0
        if user == "" or pwd == "":
              QMessageBox.information(self, "睿课", "Tips:账户与密钥不能为空,请仔细核对!")
              return
        elif user != "" and pwd != "":
               while i < int(len(data)):
                   if str(data[i][0]) == user and str(data[i][1]) == pwd:
                       QMessageBox.information(self, "睿课", "账户与密钥匹配成功,即将跳转至主页面!")
                       self.switch_main.emit()
                       return
                   i += 1
               QMessageBox.information(self, "睿课", "error:账户与密钥不匹配,请仔细核对!")
    def goregisterone(self):
        self.switch_registerone.emit()

# 注册窗口_1
class registeroneWindow(QtWidgets.QMainWindow,  registerone_ui):
    switch_registertwo = QtCore.pyqtSignal()  # 注册页面_2跳转信号
    switch_singin = QtCore.pyqtSignal()
    def __init__(self):
        super(registeroneWindow, self).__init__()
        self.setupUi(self)
        self.initUI()
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.propose_pushButton.clicked.connect(self.gosingin)
        self.propose_pushButton.clicked.connect(self.close)

    def initUI(self):
        self.number_lineEdit.setFocus()  # 鼠标焦点
        self.number_lineEdit.setPlaceholderText("请设置账户")  # 提示信息
        self.password_lineEdit.setPlaceholderText("密码大于六位(含)")
        self.password_lineEdit.setEchoMode(QLineEdit.Password)#密码隐藏
        self.next_pushButton.clicked.connect(self.emit_next_Button)  # 下一页按钮,检测账户与密码是否合规

    def emit_next_Button (self):
        config = {
            "host": "localhost",
            "user": "root",
            "password": "369852147",
            "database": "facerecognition"
        }
        db = pymysql.connect(**config)
        cursor = db.cursor()
        sql = 'SELECT t_user,t_pwd FROM teacher'
        cursor.execute(sql)
        data = cursor.fetchall()
        t_user = str(self.number_lineEdit.text())
        t_pwd = str(self.password_lineEdit.text())
        t_id = ''
        t_name = ''
        t_sex = ''
        t_school = ''
        t_college = ''
        t_protect = '2'
        i=0
        if t_user == "" or t_pwd == "":
            QMessageBox.information(self, "睿课", "白小泽检查后发现账户或者密钥为空,补填空项!")
        else:
            while i < int(len(data)):
                if str(data[i][0]) == t_user:
                    QMessageBox.information(self, "睿课", "白小泽查阅后发现这个账户名已经被注册了,账户名已被使用!")
                    return
                else:
                    sql = "insert into teacher values('{}', '{}','{}','{}','{}','{}','{}','{}')".format(t_user, t_pwd, \
                     t_id, t_name, t_sex,t_school, t_college, t_protect)
                    cursor.execute(sql)
                    db.commit()  # 提交数据
                    cursor.close()
                    db.close()
                    QMessageBox.information(self, "睿课", "白小泽提示您账号密码设置完成,请完善个人信息!")
                    self.switch_registertwo.emit()
                    return

    def gosingin(self):
        self.switch_singin.emit()

# 注册窗口_2
class registertwoWindow(QtWidgets.QMainWindow,  registertwo_ui):
    switch_singin = QtCore.pyqtSignal()
    def __init__(self):
        super(registertwoWindow, self).__init__()
        self.setupUi(self)
        self.initUI()
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.register_pushButton.clicked.connect(self.gosingin)
        self.propose_pushButton.clicked.connect(self.close)

    def initUI(self):
        self.id_lineEdit.setFocus()  # 鼠标焦点
        self.user_lineEdit.setPlaceholderText("重复账户")  # 提示信息
        self.pwd_lineEdit.setPlaceholderText("重复密钥")
        self.pwd_lineEdit.setEchoMode(QLineEdit.Password)  # 密码隐藏

    def gosingin(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql1 = "SELECT * FROM teacher WHERE t_protect=2"
        cursor.execute(sql1)
        data = cursor.fetchall()
        print(data)
        t_user = str(self.user_lineEdit.text())
        t_pwd = str(self.pwd_lineEdit.text())
        t_id = str(self.id_lineEdit.text())
        t_name = str(self.name_lineEdit.text())
        t_sex = str(self.sex_comboBox.currentText())
        t_school = str(self.university_lineEdit.text())
        t_college = str(self.college_lineEdit.text())
        t_protect = '0'
        i = 0
        if t_id == "":
            QMessageBox.information(self, "error", "教职工ID不可以为空,此项为必填信息!")
        elif t_name == "" or t_sex == "" or t_school == "" or t_college == "":
            QMessageBox.information(self, "error", "个人信息表单中有空项,请仔细核对,补填信息!")
        elif t_user == "" or t_pwd == "":
              QMessageBox.information(self, "睿课", "Tips:账户与密钥不能为空,请重新输入!")
              return
        else:
            while i<int(len(data)):
                print("1")
                if str(data[i][0]) == t_user and str(data[i][1]) == t_pwd:
                    sql2 = "DELETE FROM teacher WHERE t_protect=2"
                    cursor.execute(sql2)
                    sql = "insert into teacher values('{}', '{}','{}','{}','{}','{}','{}','{}')".format(data[0][0],\
                                                        data[0][1],t_id, t_name,t_sex,t_school,t_college, t_protect)
                    cursor.execute(sql)
                    db.commit()  # 提交数据
                    cursor.close()
                    db.close()
                    QMessageBox.information(self, "睿课", "注册完成,个人信息已经写入数据库保存!")
                    self.switch_singin.emit()
                    self.close()
                    return
                else:
                    QMessageBox.information(self, "睿课", "error:校验失败,没有找到您输入的账户与密钥!")
                    return

# 主窗口
class mainWindow(QtWidgets.QMainWindow,  main_ui):
    switch_punch = QtCore.pyqtSignal()  # 考勤页面跳转信号
    switch_collection = QtCore.pyqtSignal()  # 信息采集页面跳转信号
    switch_feedback = QtCore.pyqtSignal()  # 意见反馈页面跳转信号
    switch_random = QtCore.pyqtSignal()  # 随机抽检页面跳转信号
    switch_use = QtCore.pyqtSignal()  # 使用指南页面跳转信号
    switch_financialmedia = QtCore.pyqtSignal()  # 融媒体_1页面跳转信号
    switch_financialmediatwo = QtCore.pyqtSignal()  # 融媒体_2页面跳转信号
    switch_datawarehousing = QtCore.pyqtSignal()  # 数据仓储页面跳转信号
    switch_accountwarehousing = QtCore.pyqtSignal()  # 账户仓储页面跳转信号
    switch_dataanalysis = QtCore.pyqtSignal()  # 数据分析页面跳转信号
    def __init__(self):
        super(mainWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.pushButton_1.clicked.connect(self.gopunch)
        self.pushButton_2.clicked.connect(self.gocollection)
        self.pushButton_5.clicked.connect(self.gofeedback)
        self.pushButton_6.clicked.connect(self.close)
        self.pushButton_10.clicked.connect(self.gorandom)
        self.pushButton_4.clicked.connect(self.gouse)
        self.pushButton_8.clicked.connect(self.gofinancialmedia)
        self.pushButton_9.clicked.connect(self.gofinancialmediatwo)
        self.pushButton.clicked.connect(self.godatawarehousing)
        self.pushButton_7.clicked.connect(self.goaccountwarehousing)
        self.pushButton_3.clicked.connect(self.godataanalysis)

    def gopunch(self):
        self.switch_punch.emit()
    def gocollection(self):
        self.switch_collection.emit()
    def gofeedback(self):
        self.switch_feedback.emit()
    def gorandom(self):
        self.switch_random.emit()
    def gouse(self):
        self.switch_use.emit()
    def gofinancialmedia(self):
        self.switch_financialmedia.emit()
    def gofinancialmediatwo(self):
        self.switch_financialmediatwo.emit()
    def godatawarehousing(self):
        self.switch_datawarehousing.emit()
    def goaccountwarehousing(self):
        self.switch_accountwarehousing.emit()
    def godataanalysis(self):
        self.switch_dataanalysis.emit()
# 考勤窗口
class punchWindow(QtWidgets.QMainWindow,  punch_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    recogizer = cv2.face.LBPHFaceRecognizer_create()
    recogizer.read('D:/Face Recognition/pythonProject/Trainingmodel/train.yml')

    def __init__(self):
        super(punchWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.statusShowTime()
        self.homeButton.clicked.connect(self.gohomemain)
        self.homeButton.clicked.connect(self.close)
        self.videoButton.clicked.connect(self.Openattendance)
        self.videoButton.clicked.connect(self.datastatistics)
        self.rootButton.clicked.connect(self.rootstate)
        self.exportButton.clicked.connect(self.expordata)

    def expordata(self):
        QMessageBox.information(self, "睿课", "Tips:白小泽正在努力开发中,暂时不支持数据导出功能哦~~~")


    def rootstate(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        reply = QMessageBox.question(self,
                        "睿课",
                    "重置后所有的学生的状态将变更成未出勤状态,是否修改?",
        QMessageBox.Yes | QMessageBox.No)
        if reply == QMessageBox.Yes:
            sql = "update  punch set state = '0'"
            cursor.execute(sql)
            sql1 = "update  record set record=record-1"
            cursor.execute(sql1)
            db.commit()
            cursor.close()
            db.close()
            QMessageBox.information(self, "睿课", "Tips:白小泽已经将所有学生的考勤状态变更为0,重置成功!")

    def datastatistics(self):
        face = list()
        for s in id_face:
            if s not in face:
                face.append(s)
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql3 = "UPDATE punch SET state='0' "
        sql4 = "UPDATE record SET record=record+1"
        cursor.execute(sql3)
        cursor.execute(sql4)
        db.commit()
        sql = 'SELECT id FROM punch'
        cursor.execute(sql)
        data = cursor.fetchall()
        sql1 = 'SELECT count(id) FROM punch'
        cursor.execute(sql1)
        sum = cursor.fetchall()
        self.sumlabel.setText(str(sum[0][0])+'人')
        i = 0
        num = 0
        print(data)
        while i < int(len(data)):
            j = 0
            while j < int(len(face)):
               if str(data[i][0])==str(face[j]):
                   print(face[j])
                   sql5 = "UPDATE punch SET state='1' WHERE id="+face[j]
                   cursor.execute(sql5)
                   sql6 = "UPDATE student SET attendance=attendance+1 WHERE id="+face[j]
                   cursor.execute(sql6)
                   db.commit()
                   num += 1
               j += 1
            i += 1
        self.comelabel.setText(str(num) + '人')
        self.nolabel.setText(str((sum[0][0])-num) + '人')
        self.latelabel.setText("----")
        cursor.close()
        db.close()
        QMessageBox.information(self, "睿课", "考勤已经结束,出勤信息已经汇总完成!")

    def Openattendance(self):
        cap = cv2.VideoCapture(0)
        while True:
            flag, frame = cap.read()
            self = frame
            if not flag:
                 break
            if ord(' ') == cv2.waitKey(10):
                break
            recogizer = cv2.face.LBPHFaceRecognizer_create()
            recogizer.read('D:/Face Recognition/pythonProject/Trainingmodel/train.yml')
            path = 'D:/Face Recognition/pythonProject/FaceDatabase/'
            names = []
            imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
            for imagePath in imagePaths:
                name = str(os.path.split(imagePath)[1].split('.', 2)[1])
                names.append(name)
            gray = cv2.cvtColor(self, cv2.COLOR_BGR2GRAY)  # 转换为灰度
            face_detector = cv2.CascadeClassifier(
                'D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
            face = face_detector.detectMultiScale(gray, 1.1, 5, cv2.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))
            for x, y, w, h in face:
                cv2.rectangle(self, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
                cv2.circle(self, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)
                # 人脸识别
                ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
                if confidence > 80:
                    cv2.putText(self, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
                else:
                    cv2.putText(self, str(names[ids - 1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
                    identity = str(names[ids - 1])
                    id_face.append(identity)
            cv2.imshow('In attendance', self)
        cap.release()
        cv2.destroyAllWindows()

    def statusShowTime(self):
        self.Timer = QTimer()  # 自定义QTimer类
        self.Timer.start(1000)  # 每1s运行一次
        self.Timer.timeout.connect(self.updateTime)  # 与updateTime函数连接

    def updateTime(self):
        #获取系统时间,设置显示样式,将获取数据传送给控件
        time=QDateTime.currentDateTime()
        timeplay=time.toString('MM-dd hh:mm:ss dddd')
        self.timelabel.setText(timeplay)

    def gohomemain(self):
        self.switch_homemain.emit()

# 信息采集窗口
class collectionWindow(QtWidgets.QMainWindow,  collection_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(collectionWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.collectionButton.clicked.connect(self.collection)
        self.okButton.clicked.connect(self.ok)
        self.noButton.clicked.connect(self.no)
        self.homeButton.clicked.connect(self.gohomemain)
        self.homeButton_2.clicked.connect(self. Ttainingmodel)
        self.homeButton.clicked.connect(self.close)

    def collection(self):
        id = str(self.sidlineEdit.text())
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql1 = 'update pid set pid=pid+1'
        cursor.execute(sql1)
        db.commit()
        sql = 'SELECT pid FROM pid'
        cursor.execute(sql)
        data = cursor.fetchall()
        cursor.close()
        db.close()
        pid = data[0][0]
        if id == "":
            QMessageBox.information(self, "睿课", "请先填写《个人信息表单》中的学号段在进行人脸采集!")
            return
        else:
            cap = cv2.VideoCapture(0)
            num = 1
            while (cap.isOpened()):
                ret_flag, Vshow = cap.read()
                cv2.imshow("Face Collection", Vshow)
                k = cv2.waitKey(1) & 0XFF
                if k == ord(' '):
                    break
                elif k == ord('s') and id !="":
                    cv2.imwrite("D:/Face Recognition/pythonProject/FaceDatabase/" + str(pid) + "." + str(id) + ".jpg", Vshow)
                    print("seccess to save" + str(num) + ".jpg")
                    print("-------------------------")
                    num += 1
        cap.release()
        cv2.destroyAllWindows()
    def ok(self):
        config = {
            "host": "localhost",
            "user": "root",
            "password": "369852147",
            "database": "facerecognition"
        }
        db = pymysql.connect(**config)
        cursor = db.cursor()
        id = str(self.sidlineEdit.text())
        name = str(self.namelineEdit.text())
        cls = str(self.classlineEdit.text())
        sex = str(self.sexlineEdit.text())
        college = str(self.facultylineEdit.text())
        major = str(self.magorlineEdit.text())
        email = str(self.emaillineEdit.text())
        phone = str(self.phonelineEdit.text())
        attendance = str('0')
        state = 0 #state字段有两个参数0,1,2;0表示未出勤,1表示出勤

        if id !="" and name !="" and cls !="" and sex !="" and college !="" and major !="" and phone !="":
            sql = "insert into student values('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}','{}');".format(id,name,\
                                                                         cls,sex,college,major,email,phone,attendance)
            sql2 = "insert into punch values('{}', '{}', '{}');".format(id,name,state)
            cursor.execute(sql)
            cursor.execute(sql2)
            db.commit()  # 提交数据
            cursor.close()
            db.close()
            QMessageBox.information(self, "睿课", "您的信息采集已经完成!")
            self.sidlineEdit.clear()
            self.namelineEdit.clear()
            self.classlineEdit.clear()
            self.sexlineEdit.clear()
            self.facultylineEdit.clear()
            self.magorlineEdit.clear()
            self.emaillineEdit.clear()
            self.phonelineEdit.clear()
            self.emaillineEdit.setText("无")
        else:
            QMessageBox.information(self, "睿课", "*表示必填项,请完善个人信息!")

    def gohomemain(self):
        self.switch_homemain.emit()

    def no(self):
        self.sidlineEdit.clear()
        self.namelineEdit.clear()
        self.classlineEdit.clear()
        self.sexlineEdit.clear()
        self.facultylineEdit.clear()
        self.magorlineEdit.clear()
        self.emaillineEdit.clear()
        self.phonelineEdit.clear()
        self.emaillineEdit.setText("无")

    def Ttainingmodel(self):
        # 获取图像数组和id标签数组和姓名
        faces, ids = self.getImageAndLabels()
        # 获取训练对象
        recognizer = face.LBPHFaceRecognizer_create()
        recognizer.train(faces, np.array(ids))
        # 保存文件
        recognizer.write("D:/Face Recognition/pythonProject/Trainingmodel/train.yml")
        QMessageBox.information(self, "睿课", "人脸训练已经完成,记得提交《个人信息表单》中的数据!")

    def getImageAndLabels(path):
        # 图片路径
        path = "D:/Face Recognition/pythonProject/FaceDatabase/"
        facesSamples = []
        ids = []
        imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
        # 检测人脸
        face_detector = CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
        # 打印数组imagePaths
        print('数据排列:', imagePaths)
        # 遍历列表中的图片
        for imagePath in imagePaths:
            # 打开图片,黑白化
            PIL_img = Image.open(imagePath).convert('L')
            # 将图像转换为数组,以黑白深浅
            img_numpy = np.array(PIL_img, 'uint8')
            # 获取图片人脸特征
            faces = face_detector.detectMultiScale(img_numpy)
            # 获取每张图片的id和姓名
            id = int(os.path.split(imagePath)[1].split('.')[0])
            # 预防无面容照片
            for x, y, w, h in faces:
                ids.append(id)
                facesSamples.append(img_numpy[y:y + h, x:x + w])
            # 打印脸部特征和id
            print('id:', id)
        print('fs:', facesSamples)
        return facesSamples, ids

#数据分析窗口
class dataanalysisWindow(QtWidgets.QMainWindow, dataanalysis_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(dataanalysisWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.homeButton.clicked.connect(self.gohomemain)
        self.homeButton.clicked.connect(self.close)
        self.dataButton.clicked.connect(self.dataanalysis)
        self.staraButton.clicked.connect(self.person)
        self.get_datashow()
    def person(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        id = self.idlineEdit.text()
        if id == '':
            QMessageBox.information(self, "睿课", "白小泽没有检测到可以操作的对象,学号项为空!")
            return
        else:
            self.labellineEdit.clear()
            sql1 = "SELECT attendance FROM student WHERE id=" + id
            cursor.execute(sql1)
            data = cursor.fetchall()
            sql2 = "SELECT record FROM record "
            cursor.execute(sql2)
            records = cursor.fetchall()
            self.attendancelineEdit.setText(str(data[0][0]))
            attendance = int(data[0][0])
            record = int(records[0][0])
            record = (attendance / record) * 100
            record = Decimal(record).quantize(Decimal("0.1"), rounding="ROUND_HALF_UP")
            self.percentagelineEdit.setText(str(record) + '%')
            record = record/10
            record = Decimal(record).quantize(Decimal("0.1"), rounding="ROUND_HALF_UP")
            self.lineEdit_3.setText(str(record))
        if record < 7:
            self.labellineEdit.setText('重点关注')
        cursor.close()
        db.close()
    def dataanalysis(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql = "SELECT id FROM punch WHERE state='0'"
        cursor.execute(sql)
        data = cursor.fetchall()
        sql1 = "SELECT id,name,sex FROM student"
        cursor.execute(sql1)
        data_1 = cursor.fetchall()
        i = 0
        while i < int(len(data)):
            j=0
            while j < int(len(data_1)):
                if str(data[i][0]) == str(data_1[j][0]):
                    self.textEdit.append(str(data_1[j][0])+'    '+str(data_1[j][1])+'     '+str(data_1[j][2]))
                j+=1
            i += 1
        cursor.close()
        db.close()
    def get_dataanalysis_1(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql = "SELECT count(state) FROM punch WHERE state='1'"
        cursor.execute(sql)
        data = cursor.fetchall()
        self.sumlineEdit.setText(str(data[0][0]) + '人')
        sql1 = "SELECT count(state) FROM punch"
        cursor.execute(sql1)
        records = cursor.fetchall()
        cursor.close()
        db.close()
        attendance = int(data[0][0])
        record = int(records[0][0])
        record = (attendance / record) * 100
        record = Decimal(record).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
        fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': 'polar'})
        data = int(record)
        startangle = 90
        x = (data * pi * 2) / 100
        left = (startangle * pi * 2) / 360  # 控制起始位置
        plt.xticks([])
        plt.yticks([])
        ax.spines.clear()
        ax.barh(1, x, left=left, height=1, color='#5DADE2')
        plt.ylim(-3, 3)
        plt.text(0, -3, str(record) + '%', ha='center', va='center', fontsize=42)
        plt.savefig('dataanalysis_1.png', bbox_inches='tight')
        return record
    def get_dataanalysis_2(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql = "SELECT count(state) FROM punch WHERE state='0'"
        cursor.execute(sql)
        data = cursor.fetchall()
        self.absentlineEdit.setText(str(data[0][0]) + '人')
        sql1 = "SELECT count(state) FROM punch"
        cursor.execute(sql1)
        records = cursor.fetchall()
        cursor.close()
        db.close()
        attendance = int(data[0][0])
        record = int(records[0][0])
        record = (attendance / record) * 100
        record = Decimal(record).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
        fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': 'polar'})
        data = int(record)
        startangle = 90
        x = (data * pi * 2) / 100
        left = (startangle * pi * 2) / 360  # 控制起始位置
        plt.xticks([])
        plt.yticks([])
        ax.spines.clear()
        ax.barh(1, x, left=left, height=1, color='r')
        plt.ylim(-3, 3)
        plt.text(0, -3, str(record) + '%', ha='center', va='center', fontsize=42)
        plt.savefig('dataanalysis_2', bbox_inches='tight')
    def get_datashow(self):
        record = self.get_dataanalysis_1()
        self.get_dataanalysis_2()
        self.comelabel.setPixmap(QPixmap("dataanalysis_1.png"))
        self.comelabel.setScaledContents(True)
        self.nolabel.setPixmap(QPixmap("dataanalysis_2.png"))
        self.nolabel.setScaledContents(True)
        if record > 90:
            self.labellineEdit_2.setText("综合评级:优秀")
        elif record > 80:
            self.labellineEdit_2.setText("综合评级:良好")
        elif record > 70:
            self.labellineEdit_2.setText("综合评级:一般")
        else:
            self.labellineEdit_2.setText("综合评级:危险")
    def gohomemain(self):
        self.switch_homemain.emit()

# 意见反馈窗口
class feedbackWindow(QtWidgets.QMainWindow,  feedback_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(feedbackWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.homepushButton.clicked.connect(self.gohomemain)
        self.homepushButton.clicked.connect(self.close)
    def gohomemain(self):
        self.switch_homemain.emit()

# 随机抽检窗口
class randomWindow(QtWidgets.QMainWindow,  random_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(randomWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.homeButton.clicked.connect(self.gohomemain)
        self.homeButton.clicked.connect(self.close)
        self.randomButton.clicked.connect(self.get_random)
        self.changeButton.clicked.connect(self.get_change)
        self.backButton.clicked.connect(self.get_back)
    def get_random(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql = "SELECT id FROM punch WHERE state='1'"
        cursor.execute(sql)
        data = cursor.fetchall()
        randomlist=[]
        i=0
        while i < int(len(data)):
            randomlist.append(str(data[i][0]))
            i+=1
        index =random.randint(0, len(randomlist) - 1)
        self.random_idlabel.setText(str( randomlist[index]))
        self.id_lineEdit.setText(str(randomlist[index]))
        sql1 = "SELECT cls,name,sex,attendance FROM student WHERE id="+randomlist[index]
        cursor.execute(sql1)
        data_1 = cursor.fetchall()
        sql2 = "SELECT record FROM record "
        cursor.execute(sql2)
        records = cursor.fetchall()
        self.cls_lineEdit.setText(str(data_1[0][0]))
        self.name_lineEdit.setText(str(data_1[0][1]))
        self.sexlineEdit.setText(str(data_1[0][2]))
        self.att_lineEdit.setText(str(data_1[0][3])+'次')
        attendance = int(data_1[0][3])
        record = int(records[0][0])
        record = (attendance/record)*100
        record = Decimal(record).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
        self.rer_lineEdit.setText(str(record)+'%')
        cursor.close()
        db.close()
    def get_change(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        id = str(self.id_lineEdit.text())
        if id == "--" or id == "":
            QMessageBox.information(self, "睿课", "error:变更到课状态操作失败,没有可以操作的对象!")
            return
        else:
            sql = "update punch set state=0 where id="+id
            sql1 = "update student set attendance=attendance-1 where id="+id
            cursor.execute(sql)
            cursor.execute(sql1)
            db.commit()
            cursor.close()
            db.close()
            QMessageBox.information(self, "睿课", "Tips:变更到课状态操作成功,该生本课时已经标记为缺勤!")
    def get_back(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        id = str(self.id_lineEdit.text())
        if id == "--" or id == "":
            QMessageBox.information(self, "睿课", "error:撤销变更到课状态操作失败,没有可以操作的对象!")
            return
        else:
            sql = "update punch set state=1 where id=" + id
            sql1 = "update student set attendance=attendance+1 where id=" + id
            cursor.execute(sql)
            cursor.execute(sql1)
            db.commit()
            cursor.close()
            db.close()
            QMessageBox.information(self, "睿课", "Tips:撤销变更到课状态成功,该生本课时已经标记为到课!")
    def gohomemain(self):
        self.switch_homemain.emit()

# 使用指南窗口
class useguideWindow(QtWidgets.QMainWindow,  use_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(useguideWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.homepushButton.clicked.connect(self.gohomemain)
        self.homepushButton.clicked.connect(self.close)
    def gohomemain(self):
        self.switch_homemain.emit()

# 融媒体_1窗口
class financialmediaWindow(QtWidgets.QMainWindow,  financialmedia_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(financialmediaWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.homepushButton.clicked.connect(self.gohomemain)
        self.homepushButton.clicked.connect(self.close)
    def gohomemain(self):
        self.switch_homemain.emit()

# 融媒体_2窗口
class financialmediatwoWindow(QtWidgets.QMainWindow,  financialmediatwo_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(financialmediatwoWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.pushButton.clicked.connect(self.gohomemain)
        self.pushButton.clicked.connect(self.close)
    def gohomemain(self):
        self.switch_homemain.emit()

# 数据仓储窗口
class datawarehousingWindow(QtWidgets.QMainWindow, data_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(datawarehousingWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.changeButton.clicked.connect(self.change)
        self.deleteButton.clicked.connect(self.delete)
        self.homepushButton.clicked.connect(self.gohomemain)
        self.homepushButton.clicked.connect(self.close)
    def accountverification(self):
        s_id = str(self.idlineEdit.text())
        s_name = str(self.pwdlineEdit.text())
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql = 'SELECT id,name FROM student'
        cursor.execute(sql)
        data = cursor.fetchall()
        cursor.close()
        db.close()
        i = 0
        if s_id == "" or s_name == "":
            QMessageBox.information(self, "睿课", "白小泽不允许你变更信息操作,请完成校验账户信息(⊙o⊙)?")
            return
        elif s_id != "" and s_name != "":
            while i < int(len(data)):
                if str(data[i][0]) == s_id and str(data[i][1]) == s_name:
                    door = 1
                    checklist.append(s_id)
                    return door
                i += 1
            QMessageBox.information(self, "睿课", "白小泽经过努力核验没能找到您输入的信息,仔您细核对一下吧!")

    def change(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self. accountverification()
        s_college = str(self.collegelineEdit.text())
        s_major = str(self.majorlineEdit.text())
        s_cls = str(self.clslineEdit.text())
        s_name = str(self.namelineEdit.text())
        s_email = str(self.emaillineEdit.text())
        s_phone = str(self.phonelineEdit.text())
        door_1 = 0
        while door:
            if len(checklist) == 1:
                QMessageBox.information(self, "睿课", "白小泽校验账户信息成功,可以开始操作编辑数据信息了!")
                QMessageBox.information(self, "睿课", "白小泽提示您在一个区域内的信息项是关联的,必须填写不可以有空项哦~")
                checklist.append(door)
                return
            if s_college!="" and s_major!="":
                sql = "SELECT * FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql)
                data = cursor.fetchall()
                sql1 = "DELETE FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql1)
                sql2 ="insert into student values('{}', '{}','{}','{}','{}','{}','{}','{}','{}')".format(data[0][0],\
                     data[0][1], data[0][2],data[0][3], s_college, s_major, data[0][6],data[0][7], data[0][8])
                cursor.execute(sql2)
                db.commit()  # 提交数据
                door_1 = 1
                #QMessageBox.information(self, "睿课", "Tips:白小泽提示您个人信息变更成功了哦~")
                self.collegelineEdit.clear()
                self.majorlineEdit.clear()
            if s_cls != "" and s_name != "":
                sql = "SELECT * FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql)
                data = cursor.fetchall()
                sql1 = "DELETE FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql1)
                sql2 ="insert into student values('{}', '{}','{}','{}','{}','{}','{}','{}','{}')".format(data[0][0],\
                     s_name, s_cls,data[0][3], data[0][4],data[0][5], data[0][6],data[0][7], data[0][8])
                cursor.execute(sql2)
                db.commit()  # 提交数据
                door_1 = 1
                #QMessageBox.information(self, "睿课", "Tips:白小泽提示您个人信息变更成功了哦~")
                self.clslineEdit.clear()
                self.namelineEdit.clear()
            if s_phone != "" and s_email != "":
                sql = "SELECT * FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql)
                data = cursor.fetchall()
                sql1 = "DELETE FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql1)
                sql2 = "insert into student values('{}', '{}','{}','{}','{}','{}','{}','{}','{}')".format(data[0][0], \
                        data[0][1], data[0][2],data[0][3],data[0][4],data[0][5],s_email,s_phone,data[0][8])
                cursor.execute(sql2)
                db.commit()  # 提交数据
                door_1 = 1
                #QMessageBox.information(self, "睿课", "Tips:白小泽提示您个人信息变更成功了哦~")
                self.emaillineEdit.clear()
                self.phonelineEdit.clear()
                self.emaillineEdit.setText("无")
            if door_1 == 0:
                QMessageBox.information(self, "睿课", "Tips:白小泽检测到您没有进行任何操作哦(⊙o⊙)?")
            else:
                QMessageBox.information(self, "睿课", "Tips:白小泽提示您个人信息变更成功了哦~")
            break
        cursor.close()
        db.close()
    def delete(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self.accountverification()
        while door:
            if len(checklist) == 1:
                QMessageBox.information(self, "睿课", "白小泽校验账户信息成功,可以开始操作编辑数据信息了!")
                return
            reply = QMessageBox.question(self,
                                         "睿课",
                                         "白小泽提示您删除数据后将不能在参与考勤了,是否删除?",
                                         QMessageBox.Yes | QMessageBox.No)
            if reply == QMessageBox.Yes:
                sql = "DELETE FROM student WHERE id=" + str(checklist[0])
                cursor.execute(sql)
                db.commit()
                cursor.close()
                db.close()
                QMessageBox.information(self, "睿课", "白小泽将您的所属信息全部清空了,数据库中已经找不到您了!")
            break

    def gohomemain(self):
        self.switch_homemain.emit()

# 账户仓储窗口
class accountwarehousingWindow(QtWidgets.QMainWindow,  caccount_ui):
    switch_homemain = QtCore.pyqtSignal()  # 回主页面跳转信号
    def __init__(self):
        super(accountwarehousingWindow, self).__init__()
        self.setupUi(self)
        self.setWindowTitle("睿课人脸识别课堂考勤系统v2.0")
        self.setWindowIcon(QIcon('picture/Logo_2Max.png'))
        self.pwdlineEdit.setEchoMode(QLineEdit.Password)  # 密码隐藏
        self.cpwdEdit.setEchoMode(QLineEdit.Password)  # 密码隐藏
        self.protectButton.clicked.connect(self.get_protect)
        self.cancellationButton.clicked.connect(self.get_cancellation)
        self.cuserButton.clicked.connect(self.get_cuser)
        self.cpwdButton.clicked.connect(self.get_cpwd)
        self.changeButton.clicked.connect(self.get_change)
        self.homepushButton.clicked.connect(self.gohomemain)
        self.homepushButton.clicked.connect(self.close)
    def get_accountverification(self):
        check_tlist.clear()
        user = str(self.userlineEdit.text())
        pwd = str(self.pwdlineEdit.text())
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        sql1 = 'SELECT t_user,t_pwd,t_id FROM teacher'
        cursor.execute(sql1)
        data = cursor.fetchall()
        cursor.close()
        db.close()
        i = 0
        if user == "" or pwd == "":
            QMessageBox.information(self, "睿课", "白小泽不允许你变更信息操作,请完成校验账户信息(⊙o⊙)?")
            return
        elif user != "" and pwd != "":
            while i < int(len(data)):
                if str(data[i][0]) == user and str(data[i][1]) == pwd:
                    door = 1
                    tid = str(data[i][2])
                    check_tlist.append(tid)
                    return door
                i += 1
            QMessageBox.information(self, "睿课", "白小泽经过努力核验没能找到您输入的信息,仔您细核对一下吧!")
    def get_protect(self):

        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self.get_accountverification()
        while door:
            reply = QMessageBox.question(self,
                                         "睿课",
                                         "白小泽提示您开启账户保护后你将不能在对该账户信息进行任何操作,是否修改?",
                                         QMessageBox.Yes | QMessageBox.No)
            if reply == QMessageBox.Yes:
                sql = "UPDATE teacher SET t_protect='1' WHERE t_id="+check_tlist[0]
                cursor.execute(sql)
                db.commit()
                cursor.close()
                db.close()
                QMessageBox.information(self, "睿课", "白小泽将一直保护你的账户,成功开启保护!")
            break
    def get_cancellation(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self.get_accountverification()
        while door:
            sql1 = "SELECT t_protect FROM teacher WHERE t_id=" + str(check_tlist[0])
            cursor.execute(sql1)
            data = cursor.fetchall()
            if int(data[0][0]) == 1:
                QMessageBox.information(self, "睿课", "白小泽不允许你注销这个账户,该账户已经开启保护!!")
                return
            else:
                reply = QMessageBox.question(self,
                                    "睿课",
                                    "白小泽提示您注销账户后将不能登录系统了,是否删除?",
                                    QMessageBox.Yes | QMessageBox.No)
                if reply == QMessageBox.Yes:
                    sql = "DELETE FROM teacher WHERE t_id=" + str(check_tlist[0])
                    cursor.execute(sql)
                    db.commit()
                    cursor.close()
                    db.close()
                    QMessageBox.information(self, "睿课", "白小泽将您的所属信息全部清空了,数据库中已经找不到您了!")
                    self.userlineEdit.clear()
                    self.pwdlineEdit.clear()
            break
    def get_cuser(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self.get_accountverification()
        cuser = str(self.cuserEdit.text())
        door_1=0
        while door:
            sql1 = "SELECT t_protect FROM teacher WHERE t_id=" + str(check_tlist[0])
            cursor.execute(sql1)
            adata = cursor.fetchall()
            if int(adata[0][0]) == 1:
                QMessageBox.information(self, "睿课", "白小泽不允许你注销这个账户,该账户已经开启保护!!")
                return
            if cuser != "":
                sql = "SELECT * FROM teacher WHERE t_id=" + str(check_tlist[0])
                cursor.execute(sql)
                data = cursor.fetchall()
                sql1 = "DELETE FROM teacher WHERE t_id=" + str(check_tlist[0])
                cursor.execute(sql1)
                sql2 = "insert into teacher values('{}', '{}','{}','{}','{}','{}','{}','{}')".format(cuser, \
                        data[0][1], data[0][2], data[0][3], data[0][4], data[0][5], data[0][6], data[0][7])
                cursor.execute(sql2)
                db.commit()  # 提交数据
                door_1 =1
            if door_1 == 0:
                QMessageBox.information(self, "睿课", "白小泽没有检测到替换的账户名,那里空空如也!")
                return
            else:
                QMessageBox.information(self, "睿课", "Tips:白小泽提示您用户名变更成功了哦~")
                self.cuserEdit.clear()
            break


        cursor.close()
        db.close()
    def get_cpwd(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self.get_accountverification()
        cpwd = str(self.cpwdEdit.text())
        door_1 = 0
        while door:
            sql1 = "SELECT t_protect FROM teacher WHERE t_id=" + str(check_tlist[0])
            cursor.execute(sql1)
            adata = cursor.fetchall()
            if int(adata[0][0]) == 1:
                QMessageBox.information(self, "睿课", "白小泽不允许你操作这个账户,该账户已经开启保护!!")
                return
            if cpwd != "":
                sql = "SELECT * FROM teacher WHERE t_id=" + str(check_tlist[0])
                cursor.execute(sql)
                data = cursor.fetchall()
                sql1 = "DELETE FROM teacher WHERE t_id=" + str(check_tlist[0])
                cursor.execute(sql1)
                sql2 = "insert into teacher values('{}', '{}','{}','{}','{}','{}','{}','{}')".format(data[0][0], \
                         cpwd,data[0][2],data[0][3],data[0][4],data[0][5], data[0][6], data[0][7])
                cursor.execute(sql2)
                db.commit()  # 提交数据
                door_1 = 1
            if door_1 == 0:
                QMessageBox.information(self, "睿课", "白小泽没有检测到要修改的密码,那里空空如也!")
                return
            else:
                QMessageBox.information(self, "睿课", "Tips:白小泽提示您密钥变更成功了哦~")
                self.cpwdEdit.clear()
            break
    def get_change(self):
        db = pymysql.connect(host='localhost', port=3306, user='root', password="369852147", database="facerecognition")
        cursor = db.cursor()
        door = self.get_accountverification()
        cid = str(self.cidEdit.text())
        cname = str(self.cnameEdit.text())
        ccollege = str(self.ccollegeEdit.text())
        door_1 = 0
        while door:
            sql1 = "SELECT t_protect FROM teacher WHERE t_id=" + str(check_tlist[0])
            cursor.execute(sql1)
            adata = cursor.fetchall()
            if int(adata[0][0]) == 1:
                QMessageBox.information(self, "睿课", "白小泽不允许你操作这个账户,该账户已经开启保护!!")
                return
            if cid != "" and cname != "" and ccollege != "":
                sql = "SELECT * FROM teacher WHERE t_id=" + str(check_tlist[0])
                cursor.execute(sql)
                data = cursor.fetchall()
                sql1 = "DELETE FROM teacher WHERE t_id=" + str(check_tlist[0])
                cursor.execute(sql1)
                sql2 = "insert into teacher values('{}', '{}','{}','{}','{}','{}','{}','{}')".format(data[0][0], \
                       data[0][1], cid,cname,data[0][4],data[0][5],ccollege,data[0][7])
                cursor.execute(sql2)
                db.commit()  # 提交数据
                door_1 = 1
            if door_1 == 0:
                QMessageBox.information(self, "睿课", "白小泽提示您在一个区域的信息项是关联的不可以为空,补填空项!")
                return
            else:
                QMessageBox.information(self, "睿课", "Tips:白小泽提示您个人信息变更成功了哦~")
                self.cnameEdit.clear()
                self.cidEdit.clear()
                self.ccollegeEdit.clear()
                self.csexEdit.setText("-不可变更-")
                self.cschoolEdit.setText("-不可变更-")
            break




    def gohomemain(self):
        self.switch_homemain.emit()
# 利用一个控制器来控制页面的跳转
class Controller:
    def __init__(self):
        pass
    # 跳转到进入窗口
    def show_jinru(self):
        self.jinru = jinruWindow()
        self.jinru.switch_singin.connect(self.show_singin)
        self.jinru.show()
    # 跳转到登录窗口, 注意关闭原页面
    def show_singin(self):
        self.singin =singinWindow()
        self.singin.switch_main.connect(self.show_main)
        self.singin.switch_registerone.connect(self.show_registerone)
        self.jinru.close()
        self.singin.show()

    # 跳转到注册窗口_1, 注意关闭原页面
    def show_registerone(self):
        self.registerone = registeroneWindow()
        self.registerone.switch_registertwo.connect(self.show_registertwo)
        self.registerone.switch_singin.connect(self.show_singin)
        self.singin.close()
        self.registerone.show()

    # 跳转到注册窗口_2, 注意关闭原页面
    def show_registertwo(self):
        self.registertwo = registertwoWindow()
        self.registertwo.switch_singin.connect(self.show_singin)
        self.registerone.close()
        self.registertwo.show()

    # 跳转到主窗口, 注意关闭原页面
    def show_main(self):
        self.main = mainWindow()
        self.main.switch_punch.connect(self.show_punch)
        self.main.switch_collection.connect(self.show_collection)
        self.main.switch_feedback.connect(self.show_feedback)
        self.main.switch_random.connect(self.show_random)
        self.main.switch_use.connect(self.show_use)
        self.main.switch_financialmedia.connect(self.show_financialmedia)
        self.main.switch_financialmediatwo.connect(self.show_financialmediatwo)
        self.main.switch_datawarehousing.connect(self.show_datawarehousing)
        self.main.switch_accountwarehousing.connect(self.show_accountwarehousing)
        self.main.switch_dataanalysis.connect(self.show_dataanalysis)
        self.singin.close()
        self.main.show()

    # 跳转到考勤窗口, 注意关闭原页面
    def show_punch(self):
        self.punch = punchWindow()
        self.punch.switch_homemain.connect(self.show_main)
        self.main.close()
        self.punch.show()

    # 跳转到信息采集窗口, 注意关闭原页面
    def show_collection(self):
            self.collection = collectionWindow()
            self.collection.switch_homemain.connect(self.show_main)
            self.main.close()
            self.collection.show()

    # 跳转到信息采集窗口, 注意关闭原页面
    def show_feedback(self):
        self.feedback = feedbackWindow()
        self.feedback.switch_homemain.connect(self.show_main)
        self.main.close()
        self.feedback.show()

    # 跳转到随机抽检窗口, 注意关闭原页面
    def show_random(self):
        self.random = randomWindow()
        self.random.switch_homemain.connect(self.show_main)
        self.main.close()
        self.random.show()

    #跳转到使用窗口, 注意关闭原页面
    def show_use(self):
        self.use = useguideWindow()
        self.use.switch_homemain.connect(self.show_main)
        self.main.close()
        self.use.show()
        # 跳转到使用窗口, 注意关闭原页面

    # 跳转到融媒体_1窗口, 注意关闭原页面
    def show_financialmedia(self):
        self.financialmedia = financialmediaWindow()
        self.financialmedia.switch_homemain.connect(self.show_main)
        self.main.close()
        self.financialmedia.show()

    # 跳转到融媒体_1窗口, 注意关闭原页面
    def show_financialmediatwo(self):
        self.financialmediatwo = financialmediatwoWindow()
        self.financialmediatwo.switch_homemain.connect(self.show_main)
        self.main.close()
        self.financialmediatwo.show()

    # 跳转数据仓储窗口, 注意关闭原页面
    def show_datawarehousing(self):
        self.datawarehousing = datawarehousingWindow()
        self.datawarehousing.switch_homemain.connect(self.show_main)
        self.main.close()
        self.datawarehousing.show()

    # 跳转数据仓储窗口, 注意关闭原页面
    def show_accountwarehousing(self):
        self.accountwarehousing = accountwarehousingWindow()
        self.accountwarehousing.switch_homemain.connect(self.show_main)
        self.main.close()
        self.accountwarehousing.show()

    # 跳转数据分析窗口, 注意关闭原页面
    def show_dataanalysis(self):
        self.dataanalysis = dataanalysisWindow()
        self.dataanalysis.switch_homemain.connect(self.show_main)
        self.main.close()
        self.dataanalysis.show()

def main():
    app = QtWidgets.QApplication(sys.argv)
    controller = Controller() # 控制器实例,,
    controller.show_jinru() # 默认展示的进入页面

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

对于上述代码段优化的地方主要是连接数据库验证账户信息方面。

二、ui文件—欢迎界面

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_1jinru.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1181, 729)
        MainWindow.setStyleSheet("background-image: url(:/新前缀/JinRu.png);")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(-10, -14, 1191, 691))
        self.label.setStyleSheet("background-image: url(:/新前缀/pi_1JinRu_2.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.staraButton = QtWidgets.QPushButton(self.centralwidget)
        self.staraButton.setGeometry(QtCore.QRect(544, 521, 93, 31))
        self.staraButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"font: 18pt \"Impact\";")
        self.staraButton.setObjectName("staraButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1181, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.staraButton.setText(_translate("MainWindow", "STARA"))


import rc_1jinru_rc

三、ui文件—登录界面

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_2SingIn.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1179, 735)
        MainWindow.setStyleSheet("")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(-12, -9, 1191, 691))
        self.label.setStyleSheet("background-image: url(:/新前缀/pi_2DengLu_2.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.usernametext = QtWidgets.QLineEdit(self.centralwidget)
        self.usernametext.setGeometry(QtCore.QRect(839, 265, 241, 31))
        self.usernametext.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"font: 18pt \"微软雅黑\";")
        self.usernametext.setObjectName("usernametext")
        self.posswordtext = QtWidgets.QLineEdit(self.centralwidget)
        self.posswordtext.setGeometry(QtCore.QRect(837, 335, 241, 31))
        self.posswordtext.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"font: 18pt \"微软雅黑\";")
        self.posswordtext.setObjectName("posswordtext")
        self.loginButton = QtWidgets.QPushButton(self.centralwidget)
        self.loginButton.setGeometry(QtCore.QRect(800, 400, 93, 31))
        self.loginButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 255);\n"
"font: 18pt \"微软雅黑\";\n"
"")
        self.loginButton.setObjectName("loginButton")
        self.regButton = QtWidgets.QPushButton(self.centralwidget)
        self.regButton.setGeometry(QtCore.QRect(940, 397, 93, 40))
        self.regButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 255);\n"
"font: 18pt \"微软雅黑\";\n"
"")
        self.regButton.setObjectName("regButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1179, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.loginButton.setText(_translate("MainWindow", "登录"))
        self.regButton.setText(_translate("MainWindow", "注册"))


import rc_2SingIn_rc

四、ui文件——注册界面

界面一:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_3regsiter.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1166, 691)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, -40, 1171, 711))
        self.label.setStyleSheet("image: url(:/新前缀/pi_3regsiter_1.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.propose_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.propose_pushButton.setGeometry(QtCore.QRect(520, 499, 181, 41))
        self.propose_pushButton.setStyleSheet("font: 18pt \"微软雅黑\";\n"
"background-color: rgb(240, 240, 240);\n"
"")
        self.propose_pushButton.setObjectName("propose_pushButton")
        self.next_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.next_pushButton.setGeometry(QtCore.QRect(840, 498, 181, 41))
        self.next_pushButton.setStyleSheet("font: 18pt \"微软雅黑\";\n"
"background-color: rgb(240, 240, 240);\n"
"")
        self.next_pushButton.setObjectName("next_pushButton")
        self.number_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.number_lineEdit.setGeometry(QtCore.QRect(644, 221, 401, 74))
        self.number_lineEdit.setBaseSize(QtCore.QSize(0, 0))
        self.number_lineEdit.setStyleSheet("font: 14pt \"微软雅黑\";\n"
"color: rgb(0, 0, 0);")
        self.number_lineEdit.setObjectName("number_lineEdit")
        self.password_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.password_lineEdit.setGeometry(QtCore.QRect(644, 344, 401, 74))
        self.password_lineEdit.setBaseSize(QtCore.QSize(0, 0))
        self.password_lineEdit.setStyleSheet("font: 14pt \"微软雅黑\";\n"
"color: rgb(0, 0, 0);")
        self.password_lineEdit.setObjectName("password_lineEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1166, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.propose_pushButton.setText(_translate("MainWindow", "返回"))
        self.next_pushButton.setText(_translate("MainWindow", "下一页"))

import rc_3register_rc

界面二:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_4regsiter.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1185, 730)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1181, 681))
        self.label.setStyleSheet("background-image: url(:/新前缀/pi_4resiger_1_2.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.id_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.id_lineEdit.setGeometry(QtCore.QRect(680, 209, 311, 33))
        self.id_lineEdit.setStyleSheet("color: rgb(0, 0, 0);\n"
"font: 15pt \"微软雅黑\";")
        self.id_lineEdit.setObjectName("id_lineEdit")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(660, 210, 20, 33))
        self.line.setFrameShape(QtWidgets.QFrame.VLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.name_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.name_lineEdit.setGeometry(QtCore.QRect(626, 292, 201, 33))
        self.name_lineEdit.setStyleSheet("color: rgb(0, 0, 0);\n"
"font: 15pt \"微软雅黑\";")
        self.name_lineEdit.setObjectName("name_lineEdit")
        self.line_2 = QtWidgets.QFrame(self.centralwidget)
        self.line_2.setGeometry(QtCore.QRect(606, 293, 20, 33))
        self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.line_3 = QtWidgets.QFrame(self.centralwidget)
        self.line_3.setGeometry(QtCore.QRect(903, 291, 20, 33))
        self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.university_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.university_lineEdit.setGeometry(QtCore.QRect(625, 358, 201, 33))
        self.university_lineEdit.setStyleSheet("color: rgb(0, 0, 0);\n"
"font: 15pt \"微软雅黑\";")
        self.university_lineEdit.setObjectName("university_lineEdit")
        self.line_4 = QtWidgets.QFrame(self.centralwidget)
        self.line_4.setGeometry(QtCore.QRect(605, 359, 20, 33))
        self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_4.setObjectName("line_4")
        self.line_5 = QtWidgets.QFrame(self.centralwidget)
        self.line_5.setGeometry(QtCore.QRect(902, 360, 20, 33))
        self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_5.setObjectName("line_5")
        self.college_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.college_lineEdit.setGeometry(QtCore.QRect(922, 359, 201, 33))
        self.college_lineEdit.setStyleSheet("color: rgb(0, 0, 0);\n"
"font: 15pt \"微软雅黑\";")
        self.college_lineEdit.setObjectName("college_lineEdit")
        self.sex_comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.sex_comboBox.setGeometry(QtCore.QRect(920, 290, 101, 31))
        self.sex_comboBox.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"color: rgb(0, 0, 0);\n"
"font: 16pt \"微软雅黑\";")
        self.sex_comboBox.setObjectName("sex_comboBox")
        self.sex_comboBox.addItems(['男','女'])
        self.register_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.register_pushButton.setGeometry(QtCore.QRect(580, 536, 181, 41))
        self.register_pushButton.setStyleSheet("font: 18pt \"微软雅黑\";\n"
"background-color: rgb(240, 240, 240);\n"
"")
        self.register_pushButton.setObjectName("register_pushButton")
        self.propose_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.propose_pushButton.setGeometry(QtCore.QRect(876, 537, 181, 41))
        self.propose_pushButton.setStyleSheet("font: 18pt \"微软雅黑\";\n"
"background-color: rgb(240, 240, 240);\n"
"")
        self.propose_pushButton.setObjectName("propose_pushButton")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(551, 420, 81, 31))
        self.label_2.setStyleSheet("font: 16pt \"微软雅黑\";")
        self.label_2.setObjectName("label_2")
        self.user_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.user_lineEdit.setGeometry(QtCore.QRect(560, 460, 271, 33))
        self.user_lineEdit.setStyleSheet("color: rgb(0, 0, 0);\n"
"border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"font: 15pt \"微软雅黑\";")
        self.user_lineEdit.setText("")
        self.user_lineEdit.setObjectName("user_lineEdit")
        self.line_6 = QtWidgets.QFrame(self.centralwidget)
        self.line_6.setGeometry(QtCore.QRect(844, 460, 20, 31))
        self.line_6.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_6.setObjectName("line_6")
        self.pwd_lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.pwd_lineEdit.setGeometry(QtCore.QRect(876, 460, 271, 33))
        self.pwd_lineEdit.setStyleSheet("color: rgb(0, 0, 0);\n"
"border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"font: 15pt \"微软雅黑\";")
        self.pwd_lineEdit.setObjectName("pwd_lineEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1185, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.register_pushButton.setText(_translate("MainWindow", "注册"))
        self.propose_pushButton.setText(_translate("MainWindow", "退出"))
        self.label_2.setText(_translate("MainWindow", "校验:"))


import rc_4register_rc

五、ui文件——主界面

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_5main.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1181, 717)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1181, 671))
        self.label.setStyleSheet("background-image: url(:/新前缀/pi_5main_0主背景.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_1.setGeometry(QtCore.QRect(113, 95, 121, 101))
        self.pushButton_1.setStyleSheet("border-image: url(:/新前缀/pi_5main_1前往考勤.png);")
        self.pushButton_1.setText("")
        self.pushButton_1.setObjectName("pushButton_1")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(110, 310, 121, 101))
        self.pushButton_2.setStyleSheet("border-image: url(:/新前缀/pi_5main_2信息采集.png);")
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(356, 90, 121, 101))
        self.pushButton_3.setStyleSheet("border-image: url(:/新前缀/pi_5main_3数据分析.png);")
        self.pushButton_3.setText("")
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(344, 310, 141, 101))
        self.pushButton_4.setStyleSheet("border-image: url(:/新前缀/pi_5main_4使用指南.png);")
        self.pushButton_4.setText("")
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(600, 90, 141, 101))
        self.pushButton_5.setStyleSheet("border-image: url(:/新前缀/pi_5main_5意见反馈.png);")
        self.pushButton_5.setText("")
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(605, 310, 141, 101))
        self.pushButton_6.setStyleSheet("border-image: url(:/新前缀/pi_5main_6退出睿课.png);")
        self.pushButton_6.setText("")
        self.pushButton_6.setObjectName("pushButton_6")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(108, 540, 61, 61))
        self.pushButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_7数据管理.png);")
        self.pushButton.setText("")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_7.setGeometry(QtCore.QRect(220, 540, 61, 61))
        self.pushButton_7.setStyleSheet("border-image: url(:/新前缀/pi_5main_8人员管理.png);")
        self.pushButton_7.setText("")
        self.pushButton_7.setObjectName("pushButton_7")
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setGeometry(QtCore.QRect(390, 540, 71, 61))
        self.pushButton_8.setStyleSheet("border-image: url(:/新前缀/pi_5main_9白泽吧.png);")
        self.pushButton_8.setText("")
        self.pushButton_8.setObjectName("pushButton_8")
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_9.setGeometry(QtCore.QRect(510, 540, 61, 61))
        self.pushButton_9.setStyleSheet("border-image: url(:/新前缀/pi_5main_10关注.png);")
        self.pushButton_9.setText("")
        self.pushButton_9.setObjectName("pushButton_9")
        self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_10.setGeometry(QtCore.QRect(675, 540, 71, 61))
        self.pushButton_10.setStyleSheet("border-image: url(:/新前缀/pi_5main_11随机抽查.png);")
        self.pushButton_10.setText("")
        self.pushButton_10.setObjectName("pushButton_10")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1181, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


import rc_5main_rc

六、ui文件——考勤界面

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_6punch_the_clock.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1170, 710)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(-20, -10, 1191, 691))
        self.label.setStyleSheet("background-image: url(:/新前缀/pi_5main_18考勤背景_2.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.homeButton = QtWidgets.QPushButton(self.centralwidget)
        self.homeButton.setGeometry(QtCore.QRect(85, 46, 111, 111))
        self.homeButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_12home.png);")
        self.homeButton.setText("")
        self.homeButton.setObjectName("homeButton")
        self.videoButton = QtWidgets.QPushButton(self.centralwidget)
        self.videoButton.setGeometry(QtCore.QRect(83, 280, 111, 111))
        self.videoButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_13人脸采集.png);")
        self.videoButton.setText("")
        self.videoButton.setObjectName("videoButton")
        self.sumlabel = QtWidgets.QLabel(self.centralwidget)
        self.sumlabel.setGeometry(QtCore.QRect(129, 547, 61, 31))
        self.sumlabel.setStyleSheet("font: 25 18pt \"微软雅黑 Light\";")
        self.sumlabel.setObjectName("sumlabel")
        self.comelabel = QtWidgets.QLabel(self.centralwidget)
        self.comelabel.setGeometry(QtCore.QRect(417, 547, 61, 31))
        self.comelabel.setStyleSheet("font: 25 18pt \"微软雅黑 Light\";")
        self.comelabel.setObjectName("comelabel")
        self.nolabel = QtWidgets.QLabel(self.centralwidget)
        self.nolabel.setGeometry(QtCore.QRect(708, 548, 61, 31))
        self.nolabel.setStyleSheet("font: 25 18pt \"微软雅黑 Light\";")
        self.nolabel.setObjectName("nolabel")
        self.latelabel = QtWidgets.QLabel(self.centralwidget)
        self.latelabel.setGeometry(QtCore.QRect(1000, 547, 61, 31))
        self.latelabel.setStyleSheet("font: 25 18pt \"微软雅黑 Light\";")
        self.latelabel.setObjectName("latelabel")
        self.exportButton = QtWidgets.QPushButton(self.centralwidget)
        self.exportButton.setGeometry(QtCore.QRect(764, 290, 111, 111))
        self.exportButton.setStyleSheet("\n"
"border-image: url(:/新前缀/pi_5main_16数据导出.png);")
        self.exportButton.setText("")
        self.exportButton.setObjectName("exportButton")
        self.rootButton = QtWidgets.QPushButton(self.centralwidget)
        self.rootButton.setGeometry(QtCore.QRect(996, 300, 111, 101))
        self.rootButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_23重置考勤.png);")
        self.rootButton.setText("")
        self.rootButton.setObjectName("exportButton_2")
        self.comelabel_2 = QtWidgets.QLabel(self.centralwidget)
        self.comelabel_2.setGeometry(QtCore.QRect(733, 949, 61, 31))
        self.comelabel_2.setStyleSheet("font: 25 18pt \"微软雅黑 Light\";")
        self.comelabel_2.setObjectName("comelabel_2")
        self.nolabel_2 = QtWidgets.QLabel(self.centralwidget)
        self.nolabel_2.setGeometry(QtCore.QRect(1024, 950, 61, 31))
        self.nolabel_2.setStyleSheet("font: 25 18pt \"微软雅黑 Light\";")
        self.nolabel_2.setObjectName("nolabel_2")
        self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
        self.calendarWidget.setGeometry(QtCore.QRect(730, 22, 401, 201))
        self.calendarWidget.setObjectName("calendarWidget")
        self.timelabel = QtWidgets.QLabel(self.centralwidget)
        self.timelabel.setGeometry(QtCore.QRect(440, 58, 231, 31))
        self.timelabel.setStyleSheet("font: 25 14pt \"微软雅黑 Light\";")
        self.timelabel.setText("")
        self.timelabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.timelabel.setObjectName("timelabel")
        self.statelabel = QtWidgets.QLabel(self.centralwidget)
        self.statelabel.setGeometry(QtCore.QRect(437, 144, 231, 31))
        self.statelabel.setStyleSheet("font: 25 10pt \"微软雅黑 Light\";")
        self.statelabel.setAlignment(QtCore.Qt.AlignCenter)
        self.statelabel.setObjectName("statelabel")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(290, 270, 401, 181))
        self.label_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"font: 11pt \"微软雅黑\";\n"
"")
        self.label_2.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1170, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.sumlabel.setText(_translate("MainWindow", "0"))
        self.comelabel.setText(_translate("MainWindow", "0"))
        self.nolabel.setText(_translate("MainWindow", "0"))
        self.latelabel.setText(_translate("MainWindow", "0"))
        self.comelabel_2.setText(_translate("MainWindow", "0"))
        self.nolabel_2.setText(_translate("MainWindow", "0"))
        self.statelabel.setText(_translate("MainWindow", "0:表示未到 1:表示到课"))
        self.label_2.setText(_translate("MainWindow", "\n"
"注意:\n"
"    1.单击\"开始考勤\"将弹出人脸识别窗口,系统将\n"
"      自动开始记录人员;\n"
"    2.按下键盘Space键将结束考勤,系统开启汇总\n"
"      考勤信息;\n"
"    3.重复考勤将会覆盖上次考勤到课状态。\n"
""))


import rc_6punch_the_clock_rc

七、ui文件——信息采集界面

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'qt_7collection.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1169, 705)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(-10, -10, 1181, 671))
        self.label.setStyleSheet("background-image: url(:/新前缀/pi_5main_19采集背景_2.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.homeButton = QtWidgets.QPushButton(self.centralwidget)
        self.homeButton.setGeometry(QtCore.QRect(80, 45, 111, 111))
        self.homeButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_12home.png);")
        self.homeButton.setText("")
        self.homeButton.setObjectName("homeButton")
        self.collectionButton = QtWidgets.QPushButton(self.centralwidget)
        self.collectionButton.setGeometry(QtCore.QRect(80, 280, 111, 111))
        self.collectionButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_13人脸采集.png);")
        self.collectionButton.setText("")
        self.collectionButton.setObjectName("collectionButton")
        self.okButton = QtWidgets.QPushButton(self.centralwidget)
        self.okButton.setGeometry(QtCore.QRect(694, 500, 51, 41))
        self.okButton.setStyleSheet("border-image: url(:/新前缀/pi_5main_14确认.png);")
        self.okButton.setText("")
        self.okButton.setObjectName("okButton")
        self.noButton = QtWidgets.QPushButton(self.centralwidget)
        self.noButton.setGeometry(QtCore.QRect(950, 501, 51, 41))
        self.noButton.setStyleSheet("\n"
"border-image: url(:/新前缀/pi_5main_15取消.png);")
        self.noButton.setText("")
        self.noButton.setObjectName("noButton")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(712, 90, 357, 34))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.sidlineEdit = QtWidgets.QLineEdit(self.layoutWidget)
        self.sidlineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.sidlineEdit.setText("")
        self.sidlineEdit.setObjectName("sidlineEdit")
        self.horizontalLayout.addWidget(self.sidlineEdit)
        self.classlineEdit = QtWidgets.QLineEdit(self.layoutWidget)
        self.classlineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.classlineEdit.setText("")
        self.classlineEdit.setObjectName("classlineEdit")
        self.horizontalLayout.addWidget(self.classlineEdit)
        self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget1.setGeometry(QtCore.QRect(713, 170, 357, 34))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget1)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.namelineEdit = QtWidgets.QLineEdit(self.layoutWidget1)
        self.namelineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.namelineEdit.setText("")
        self.namelineEdit.setObjectName("namelineEdit")
        self.horizontalLayout_2.addWidget(self.namelineEdit)
        self.sexlineEdit = QtWidgets.QLineEdit(self.layoutWidget1)
        self.sexlineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.sexlineEdit.setText("")
        self.sexlineEdit.setObjectName("sexlineEdit")
        self.horizontalLayout_2.addWidget(self.sexlineEdit)
        self.layoutWidget2 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget2.setGeometry(QtCore.QRect(720, 320, 357, 34))
        self.layoutWidget2.setObjectName("layoutWidget2")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.layoutWidget2)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.facultylineEdit = QtWidgets.QLineEdit(self.layoutWidget2)
        self.facultylineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.facultylineEdit.setText("")
        self.facultylineEdit.setObjectName("facultylineEdit")
        self.horizontalLayout_3.addWidget(self.facultylineEdit)
        self.magorlineEdit = QtWidgets.QLineEdit(self.layoutWidget2)
        self.magorlineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.magorlineEdit.setText("")
        self.magorlineEdit.setObjectName("magorlineEdit")
        self.horizontalLayout_3.addWidget(self.magorlineEdit)
        self.layoutWidget3 = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget3.setGeometry(QtCore.QRect(722, 397, 357, 34))
        self.layoutWidget3.setObjectName("layoutWidget3")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.layoutWidget3)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.emaillineEdit = QtWidgets.QLineEdit(self.layoutWidget3)
        self.emaillineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.emaillineEdit.setText("无")
        self.emaillineEdit.setObjectName("emaillineEdit")
        self.horizontalLayout_4.addWidget(self.emaillineEdit)
        self.phonelineEdit = QtWidgets.QLineEdit(self.layoutWidget3)
        self.phonelineEdit.setStyleSheet("border-image: url(:/新前缀/pi_5main_20文本框专用.png);\n"
"color: rgb(0, 0, 0);\n"
"font: 25 14pt \"微软雅黑 Light\";")
        self.phonelineEdit.setText("")
        self.phonelineEdit.setObjectName("phonelineEdit")
        self.horizontalLayout_4.addWidget(self.phonelineEdit)
        self.homeButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.homeButton_2.setGeometry(QtCore.QRect(315, 53, 111, 111))
        self.homeButton_2.setStyleSheet("border-image: url(:/新前缀/pi_5main_22训练模型.png);")
        self.homeButton_2.setText("")
        self.homeButton_2.setObjectName("homeButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1169, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


import rc_7collection_rc

本文文章为上,后续的ui文件脚本见下。

诚挚的欢迎大家一起来讨论,提出问题批评指正。

有关基于Python的人脸识别课堂系统(毕设)——附录上的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  3. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  4. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  5. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  6. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  7. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  10. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

随机推荐