朋友需求考场自动分配

本文介绍了使用PyQt5开发的企智星考场自动分配工具,包含UI界面设计,如文本输入、按钮选择文件和显示处理结果,以及对Excel文件的读取和数据处理功能。
摘要由CSDN通过智能技术生成

UI界面

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

# Form implementation generated from reading ui file '.\qzx_kaochang_caculate.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(478, 415)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(100)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 182, 182))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 182, 182))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        MainWindow.setPalette(palette)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setGeometry(QtCore.QRect(10, 79, 361, 31))
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(380, 80, 91, 31))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 60, 54, 16))
        self.label.setObjectName("label")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(0, 40, 481, 16))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 10, 500, 22))
        font = QtGui.QFont()
        font.setFamily("华文行楷")
        font.setPointSize(14)
        self.label_2.setFont(font)
        self.label_2.setTextFormat(QtCore.Qt.PlainText)
        self.label_2.setObjectName("label_2")
        self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit_2.setGeometry(QtCore.QRect(0, 240, 481, 181))
        self.plainTextEdit_2.setObjectName("plainTextEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 220, 54, 16))
        self.label_3.setObjectName("label_3")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(380, 200, 91, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.plainTextEdit_3 = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit_3.setGeometry(QtCore.QRect(10, 180, 101, 31))
        self.plainTextEdit_3.setObjectName("plainTextEdit_3")
        self.line_3 = QtWidgets.QFrame(self.centralwidget)
        self.line_3.setGeometry(QtCore.QRect(0, 140, 491, 21))
        self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 130, 54, 16))
        self.label_4.setObjectName("label_4")
        self.line_4 = QtWidgets.QFrame(self.centralwidget)
        self.line_4.setGeometry(QtCore.QRect(0, 110, 491, 21))
        self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_4.setObjectName("line_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 160, 131, 21))
        self.label_5.setObjectName("label_5")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(200, 160, 200, 20))
        self.checkBox.setObjectName("checkBox")
        self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_2.setGeometry(QtCore.QRect(400, 160, 200, 20))
        self.checkBox_2.setObjectName("checkBox_2")
        MainWindow.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "企智星考场自动分配工具-2024"))
        self.plainTextEdit.setPlainText(_translate("MainWindow", "点击此处选择需要处理的文件"))
        self.pushButton.setText(_translate("MainWindow", "选择文件"))
        self.label.setText(_translate("MainWindow", "文件路径:"))
        self.label_2.setText(_translate("MainWindow", "我见青山多妩媚,青山见我应如是"))
        self.label_3.setText(_translate("MainWindow", "运行日志:"))
        self.pushButton_2.setText(_translate("MainWindow", "开始处理"))
        self.plainTextEdit_3.setPlainText(_translate("MainWindow", "25"))
        self.label_4.setText(_translate("MainWindow", "参数配置"))
        self.label_5.setText(_translate("MainWindow", "每个考场最大人数"))
        self.checkBox.setText(_translate("MainWindow", "文理分科考场序号重置"))
        self.checkBox_2.setText(_translate("MainWindow", "分割保存"))
## 主程序

```python
import pandas as pd
from qzx_kaochang_caculateui import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow,QWidget,QFileDialog,QMessageBox
from PyQt5.QtGui import QIcon
import os


class MyWindow(QWidget, Ui_MainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setupUi(self)
# 文件路径方法
def file_select():
    file_path, _ = QFileDialog.getOpenFileName(window, "选择文件", "", "Excel files (*.xlsx;*.xls)")
    ui.plainTextEdit.setPlainText(file_path)


def file_save(df, file_path):
    # 获取文本框中的路径并拼接完整的文件名
    base_name =file_path
    file_path = os.path.dirname(ui.plainTextEdit.toPlainText()) + '\\处理结果\\' + file_path + '.xlsx'

    os.makedirs(os.path.dirname(file_path),exist_ok=True)

    # 创建ExcelWriter对象,指定引擎为'xlsxwriter'
    A1 = pd.ExcelWriter(file_path, engine='openpyxl')

    # 将DataFrame写入到Excel文件中,指定工作表的名字(默认为'Sheet1')
    df.to_excel(A1, sheet_name='Sheet1', index=False)
    # 保存写入的数据到Excel文件
    A1.close()
    log(f"已完成【{base_name}】的处理")
def fill_exam_rooms(df, seat_split,wl_exam_flush,spilt_save):
    new_df = df.groupby(by="学校名称",sort=False)  # 分组操作
    fill_data = []
    for name1, data1 in new_df:
        data2 = data1.groupby(by='文理科',sort=False)
        result = []  # 按学校分组
        i = 1 #文理不分科,存储历史考场号数据
        for name2,data3 in data2:
            seat_num = 1
            if wl_exam_flush == True:
                exam_num = 1
            else:
                exam_num = i
            for index,row in data3.iterrows():

                data3.at[index,'考场']=exam_num
                data3.at[index,'座位号']=seat_num
                seat_num+=1
                while seat_num > int(seat_split):
                    seat_num =1
                    exam_num+=1
                    i = exam_num
            result.append(data3)
            result_DataFrame=(pd.concat(result, axis=0,ignore_index=True)) # 忽略原有索引,生成新的唯一索引
        if spilt_save == True:
            file_save(result_DataFrame,name1)
        else:
            fill_data.append(result_DataFrame)
            fill_DataFrame = (pd.concat(fill_data, axis=0, ignore_index=True))
    if spilt_save == False:
        file_save(fill_DataFrame,'完整结果')
    else:
        log("已完成全部学校的数据处理")






def process_file():
    seat_spilt = ui.plainTextEdit_3.toPlainText()
    wl_exam_flush = ui.checkBox.isChecked()
    spilt_save = ui.checkBox_2.isChecked()
    file_path = ui.plainTextEdit.toPlainText()
    if file_path:
        try:
            df = pd.read_excel(file_path, engine='openpyxl',header=0)
            fill_exam_rooms(df,seat_spilt,wl_exam_flush,spilt_save)
        except Exception as e:
            log(str(e))

def log(info):
    ui.plainTextEdit_2.appendPlainText(info)

def check():
    msg_box = QMessageBox.information(None, "提示", "检查个锤锤,代码核心逻辑没错不可能错")
if __name__ == "__main__":
    app = QApplication([])
    window_icon = QIcon('skycyan.ico')  # 替换为你的图标文件路径
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    ui.pushButton_2.clicked.connect(process_file)
    ui.pushButton.clicked.connect(file_select)
    ui.plainTextEdit.setPlainText("请选择文件")
    window.setWindowIcon(window_icon)
    window.show()
    app.exec_()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值