컴퓨터/Python

pyqt css 적용하기

풍경소리^^ 2024. 7. 18. 10:24

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;
}