121 lines
4.2 KiB
Python
121 lines
4.2 KiB
Python
# main.py
|
|
import sys
|
|
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QAction, QFileDialog, QMenuBar
|
|
from ui.layouts import QHLayout, QVLayout, TableLayout, LogLayout, SearchTextLayout, ToggleLayout
|
|
from ui.fonts import set_font
|
|
from data.loader import DataLoader
|
|
from logger import default_logger
|
|
|
|
class MainWindow(QMainWindow):
|
|
def __init__(self):
|
|
super().__init__()
|
|
try:
|
|
self.initUI()
|
|
except Exception as e:
|
|
default_logger.error(f"Error initializing UI: {e}")
|
|
sys.exit(1)
|
|
|
|
def initUI(self):
|
|
self.setGeometry(100, 100, 450, 900)
|
|
self.setWindowTitle('전동차 데이터 관리 프로그램')
|
|
|
|
# 중앙에 배치
|
|
self.center()
|
|
|
|
# 메인 위젯과 레이아웃 설정
|
|
central_widget = QWidget()
|
|
layout = QVBoxLayout()
|
|
central_widget.setLayout(layout)
|
|
self.setCentralWidget(central_widget)
|
|
|
|
# 레이아웃 추가
|
|
self.addLayouts(layout)
|
|
|
|
# 메뉴 설정
|
|
self.createMenuBar()
|
|
|
|
def addLayouts(self, layout):
|
|
try:
|
|
settings_layout = QHLayout()
|
|
settings_layout.addLayout(ToggleLayout("항상위"))
|
|
settings_layout.addLayout(ToggleLayout("검색히스토리 저장"))
|
|
layout.addLayout(settings_layout)
|
|
|
|
search_layout = SearchTextLayout()
|
|
layout.addLayout(search_layout)
|
|
|
|
categories_layout = QHLayout()
|
|
categories = [
|
|
"전체", "차체", "ATC/ATO", "냉난방", "출입문", "도입단계",
|
|
"제동", "추진장치", "SIV", "공기", "화재감지", "CCTV", "기타장치"
|
|
]
|
|
for category in categories:
|
|
toggle = ToggleLayout(category)
|
|
categories_layout.addLayout(toggle)
|
|
layout.addLayout(categories_layout)
|
|
|
|
self.table_layout = TableLayout()
|
|
layout.addLayout(self.table_layout)
|
|
|
|
self.log_layout = LogLayout()
|
|
layout.addLayout(self.log_layout)
|
|
except Exception as e:
|
|
default_logger.error(f"Error adding layouts: {e}")
|
|
|
|
def center(self):
|
|
try:
|
|
frame_geom = self.frameGeometry()
|
|
screen = QApplication.desktop().screenNumber(QApplication.desktop().cursor().pos())
|
|
center_point = QApplication.desktop().screenGeometry(screen).center()
|
|
frame_geom.moveCenter(center_point)
|
|
self.move(frame_geom.topLeft())
|
|
except Exception as e:
|
|
default_logger.error(f"Error centering window: {e}")
|
|
|
|
def createMenuBar(self):
|
|
try:
|
|
menu_bar = QMenuBar(self)
|
|
self.setMenuBar(menu_bar)
|
|
|
|
file_menu = menu_bar.addMenu('File')
|
|
|
|
load_action = QAction('데이터로드', self)
|
|
load_action.triggered.connect(self.load_data)
|
|
file_menu.addAction(load_action)
|
|
|
|
delete_action = QAction('데이터삭제', self)
|
|
delete_action.triggered.connect(self.delete_data)
|
|
file_menu.addAction(delete_action)
|
|
except Exception as e:
|
|
default_logger.error(f"Error creating menu bar: {e}")
|
|
|
|
def load_data(self):
|
|
try:
|
|
options = QFileDialog.Options()
|
|
file_path, _ = QFileDialog.getOpenFileName(self, "엑셀 파일 선택", "", "엑셀 파일 (*.xlsx; *.xls);;All Files (*)", options=options)
|
|
if file_path:
|
|
loader = DataLoader()
|
|
loader.load_data_from_excel(file_path)
|
|
self.table_layout.update_table()
|
|
except Exception as e:
|
|
default_logger.error(f"Error loading data: {e}")
|
|
|
|
def delete_data(self):
|
|
try:
|
|
if os.path.exists('datas.db'):
|
|
os.remove('datas.db')
|
|
self.table_layout.clear_table()
|
|
except Exception as e:
|
|
default_logger.error(f"Error deleting data: {e}")
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
app = QApplication(sys.argv)
|
|
set_font(app)
|
|
main_win = MainWindow()
|
|
main_win.show()
|
|
sys.exit(app.exec_())
|
|
except Exception as e:
|
|
default_logger.error(f"Unexpected error: {e}")
|
|
sys.exit(1)
|