UI界面
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)
A1 = pd.ExcelWriter(file_path, engine='openpyxl')
df.to_excel(A1, sheet_name='Sheet1', index=False)
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_()