run_employee.py
0.01MB
update_style.css
0.00MB
직원현황.xlsx
0.01MB
run_employee.py--------------------------------------------------
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QPushButton, QDialog, QFormLayout, QLineEdit, QMessageBox, QHBoxLayout, QWidget
from PyQt5.QtCore import Qt
from openpyxl import load_workbook
from openpyxl.workbook import Workbook
from datetime import datetime
EXCEL_FILE = "직원현황.xlsx"
SHEET_NAME = "데이터"
class EmployeeDialog(QDialog):
def __init__(self, employee=None, parent=None):
super().__init__(parent)
self.employee = employee if employee else {"성명": "", "직위": "", "입사일": "", "생일": "", "주소": ""}
self.initUI()
def initUI(self):
self.setWindowTitle("직원현황")
layout = QFormLayout(self)
self.nameEdit = QLineEdit(self.employee['성명'])
self.positionEdit = QLineEdit(self.employee['직위'])
self.joinDateEdit = QLineEdit(self.employee['입사일'])
self.birthDateEdit = QLineEdit(self.employee['생일'])
self.addressEdit = QLineEdit(self.employee['주소'])
layout.addRow("성명:", self.nameEdit)
layout.addRow("직위:", self.positionEdit)
layout.addRow("입사일:", self.joinDateEdit)
layout.addRow("생일:", self.birthDateEdit)
layout.addRow("주소:", self.addressEdit)
self.saveButton = QPushButton("저장")
self.saveButton.clicked.connect(self.saveEmployee)
layout.addWidget(self.saveButton)
def saveEmployee(self):
self.employee['성명'] = self.nameEdit.text()
self.employee['직위'] = self.positionEdit.text()
self.employee['입사일'] = self.formatDate(self.joinDateEdit.text())
self.employee['생일'] = self.formatDate(self.birthDateEdit.text())
self.employee['주소'] = self.addressEdit.text()
self.accept()
def formatDate(self, date_str):
try:
date = datetime.strptime(date_str, '%Y-%m-%d')
except ValueError:
return date_str
return date.strftime('%Y-%m-%d')
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("직원관리")
self.employees = []
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(5)
self.tableWidget.setHorizontalHeaderLabels(["성명", "직위", "입사일", "생일", "주소"])
self.tableWidget.cellDoubleClicked.connect(self.openEditDialog)
buttonLayout = QHBoxLayout()
self.addButton = QPushButton("추가")
self.addButton.clicked.connect(self.addEmployee)
self.deleteButton = QPushButton("삭제")
self.deleteButton.clicked.connect(self.deleteEmployee)
self.saveExcelButton = QPushButton("엑셀저장")
self.saveExcelButton.clicked.connect(self.saveToExcel)
buttonLayout.addWidget(self.addButton)
buttonLayout.addWidget(self.deleteButton)
buttonLayout.addWidget(self.saveExcelButton)
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.tableWidget)
mainLayout.addLayout(buttonLayout)
container = QWidget()
container.setLayout(mainLayout)
self.setCentralWidget(container)
self.loadEmployees()
def loadEmployees(self):
try:
workbook = load_workbook(EXCEL_FILE)
sheet = workbook[SHEET_NAME]
self.employees = []
for row in sheet.iter_rows(min_row=2, values_only=True):
self.employees.append({
"성명": row[0],
"직위": row[1],
"입사일": row[2].strftime('%Y-%m-%d') if isinstance(row[2], datetime) else row[2],
"생일": row[3].strftime('%Y-%m-%d') if isinstance(row[3], datetime) else row[3],
"주소": row[4]
})
self.loadTable()
except FileNotFoundError:
QMessageBox.warning(self, "Error", f"{EXCEL_FILE} 파일을 찾을 수 없습니다.")
def loadTable(self):
self.tableWidget.setRowCount(len(self.employees))
for row, employee in enumerate(self.employees):
self.tableWidget.setItem(row, 0, QTableWidgetItem(employee['성명']))
self.tableWidget.setItem(row, 1, QTableWidgetItem(employee['직위']))
self.tableWidget.setItem(row, 2, QTableWidgetItem(employee['입사일']))
self.tableWidget.setItem(row, 3, QTableWidgetItem(employee['생일']))
self.tableWidget.setItem(row, 4, QTableWidgetItem(employee['주소']))
def openEditDialog(self, row, column):
employee = self.employees[row]
dialog = EmployeeDialog(employee, self)
if dialog.exec_():
self.employees[row] = dialog.employee
self.loadTable()
def addEmployee(self):
dialog = EmployeeDialog(parent=self)
if dialog.exec_():
self.employees.append(dialog.employee)
self.loadTable()
def deleteEmployee(self):
selected_row = self.tableWidget.currentRow()
if selected_row >= 0:
del self.employees[selected_row]
self.loadTable()
def saveToExcel(self):
try:
workbook = load_workbook(EXCEL_FILE)
if SHEET_NAME in workbook.sheetnames:
sheet = workbook[SHEET_NAME]
index = workbook.sheetnames.index(SHEET_NAME)
workbook.remove(sheet)
new_sheet = workbook.create_sheet(SHEET_NAME, index)
else:
new_sheet = workbook.create_sheet(SHEET_NAME)
except FileNotFoundError:
workbook = Workbook()
new_sheet = workbook.active
new_sheet.title = SHEET_NAME
headers = ["성명", "직위", "입사일", "생일", "주소"]
new_sheet.append(headers)
for employee in self.employees:
new_sheet.append([employee['성명'], employee['직위'], employee['입사일'], employee['생일'], employee['주소']])
workbook.save(EXCEL_FILE)
QMessageBox.information(self, "Success", f"{EXCEL_FILE}에 저장되었습니다.")
if __name__ == "__main__":
app = QApplication(sys.argv)
# CSS 파일 로드 및 적용
with open('update_style.css', 'r') as file:
app.setStyleSheet(file.read())
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
update_style.css--------------------------------------------------
QDialog{background:yellow;}
QPushButton{
background-color:rgb(255, 0, 0, 0.5);
color:black;
border-radius:5px;
}
'컴퓨터 > Python' 카테고리의 다른 글
python exceltoexcel 비교 (0) | 2024.10.14 |
---|---|
python pyside6 가상환경 Qt Designer 사용하기 (0) | 2024.09.10 |
python 가상환경 virtualvenv (0) | 2024.07.18 |
python 엑셀 데이터 가져와서 main window 수정 sub window 엑셀 저장 (0) | 2024.07.17 |
python 여러개의 pdf들의 1페이지만 합쳐서 새로운 pdf파일 만들기 (0) | 2024.05.21 |