Train_Code1/main.py

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)