다크 테마 지원 추가 및 설정 창에서 테마 선택 기능 구현 / 정렬 기능 추가가

This commit is contained in:
3minbe 2025-02-21 10:43:18 +09:00
parent 35cc1669b1
commit c74707415c
2 changed files with 155 additions and 31 deletions

View File

@ -102,24 +102,119 @@ class MainView(QtWidgets.QMainWindow):
self.setupCloseEvent() # 프로그램 종료 이벤트 설정
self.tree.itemSelectionChanged.connect(self.onFileSelectionChanged)
# 테마 적용
theme = self.settings.get("theme", "light")
if theme == "dark":
self.applyDarkTheme()
else:
self.setStyleSheet("")
def applyDarkTheme(self):
dark_stylesheet = """
QMainWindow {
background-color: #2b2b2b;
color: #ffffff;
}
QMenuBar {
background-color: #2b2b2b;
color: #ffffff;
}
QMenuBar::item {
background-color: #2b2b2b;
color: #ffffff;
}
QMenuBar::item:selected {
background-color: #3c3c3c;
}
QMenu {
background-color: #2b2b2b;
color: #ffffff;
}
QMenu::item:selected {
background-color: #3c3c3c;
}
QToolBar {
background-color: #2b2b2b;
color: #ffffff;
}
QToolButton {
background-color: #2b2b2b;
color: #ffffff;
}
QToolButton:hover {
background-color: #3c3c3c;
}
QStatusBar {
background-color: #2b2b2b;
color: #ffffff;
}
QTreeWidget {
background-color: #2b2b2b;
color: #ffffff;
}
QTreeWidget::item {
background-color: #2b2b2b;
color: #ffffff;
}
QTreeWidget::item:selected {
background-color: #3c3c3c;
}
QLineEdit {
background-color: #3c3c3c;
color: #ffffff;
}
QPushButton {
background-color: #3c3c3c;
color: #ffffff;
}
QPushButton:hover {
background-color: #4d4d4d;
}
QTextEdit {
background-color: #3c3c3c;
color: #ffffff;
}
QComboBox {
background-color: #3c3c3c;
color: #ffffff;
}
QComboBox QAbstractItemView {
background-color: #3c3c3c;
color: #ffffff;
}
QProgressBar {
background-color: #3c3c3c;
color: #ffffff;
}
QLabel {
color: #ffffff;
}
QDialog {
background-color: #2b2b2b;
color: #ffffff;
}
"""
self.setStyleSheet(dark_stylesheet)
def loadSettings(self):
global channel_info, file_paths
self.settings_file = "settings.json"
if os.path.exists(self.settings_file):
with open(self.settings_file, "r", encoding="utf-8") as file:
self.settings = json.load(file) # 설정 파일 로드
self.default_save_path = self.settings.get("default_save_path", os.path.join(os.path.expanduser("~"), "Desktop"))
self.last_opened_dir = self.settings.get("last_opened_dir", os.path.expanduser("~"))
self.saveSettings()
theme = self.settings.get("theme", "light")
if theme == "dark":
self.applyDarkTheme()
else:
self.setStyleSheet("")
else:
self.settings = {"theme": "light"} # 기본 설정
self.default_save_path = os.path.join(os.path.expanduser("~"), "Desktop") # 바탕화면 경로 설정
self.last_opened_dir = os.path.expanduser("~")
def saveSettings(self):
global channel_info, file_paths
self.settings["default_save_path"] = self.default_save_path
self.settings["file_paths"] = self.file_paths
self.settings["last_opened_dir"] = self.last_opened_dir
with open(self.settings_file, "w", encoding="utf-8") as file:
json.dump(self.settings, file, ensure_ascii=False, indent=4) # 설정 파일 저장
@ -244,6 +339,7 @@ class MainView(QtWidgets.QMainWindow):
self.tree = QtWidgets.QTreeWidget()
self.tree.setColumnCount(4)
self.tree.setHeaderLabels(['파일명', '파일경로', '채널', '파일크기'])
self.tree.setSortingEnabled(True) # 정렬 기능 활성화
self.tree.setColumnWidth(0, 400) # 파일명 너비 설정
self.tree.setColumnWidth(1, 450) # 파일경로 너비 설정
self.tree.setColumnWidth(2, 50) # 채널 너비 설정
@ -389,7 +485,6 @@ class MainView(QtWidgets.QMainWindow):
for item in selected_items:
index = self.tree.indexOfTopLevelItem(item)
file_path = os.path.join(item.text(1), item.text(0))
self.removeChannelInfo(file_path) # 채널 정보 제거
self.tree.takeTopLevelItem(index)
self.file_paths = [self.tree.topLevelItem(i).text(1) + '/' + self.tree.topLevelItem(i).text(0) for i in range(self.tree.topLevelItemCount())]
self.updateAlertText(f"파일 삭제 완료", deleted_files)
@ -404,18 +499,11 @@ class MainView(QtWidgets.QMainWindow):
for i in range(self.tree.topLevelItemCount()):
item = self.tree.topLevelItem(i)
file_path = os.path.join(item.text(1), item.text(0))
self.removeChannelInfo(file_path) # 채널 정보 제거
self.tree.clear()
self.file_paths = []
self.updateAlertText(f"모든 파일 삭제 완료", deleted_files)
self.saveSettings()
def removeChannelInfo(self, file_path):
if "channel_info" in self.settings and file_path in self.settings["channel_info"]:
del self.settings["channel_info"][file_path]
self.saveSettings()
print(f"[INFO] Removed channel info for {file_path}")
def clearAlerts(self):
self.alert_text.clear()
@ -470,29 +558,71 @@ class MainView(QtWidgets.QMainWindow):
def openSettings(self):
settings_window = QtWidgets.QDialog(self)
settings_window.setWindowTitle("설정")
settings_window.setGeometry(100, 100, 400, 300)
settings_window.setGeometry(100, 100, 800, 600)
layout = QtWidgets.QVBoxLayout(settings_window)
label = QtWidgets.QLabel("설정 창입니다.")
label.setAlignment(QtCore.Qt.AlignCenter)
layout.addWidget(label)
theme_label = QtWidgets.QLabel("테마 선택:")
layout.addWidget(theme_label)
self.light_theme_radio = QtWidgets.QRadioButton("Light")
self.dark_theme_radio = QtWidgets.QRadioButton("Dark")
layout.addWidget(self.light_theme_radio)
layout.addWidget(self.dark_theme_radio)
# 현재 설정된 테마에 따라 라디오 버튼 상태 설정
if self.settings.get("theme", "light") == "light":
self.light_theme_radio.setChecked(True)
else:
self.dark_theme_radio.setChecked(True)
self.light_theme_radio.toggled.connect(self.onThemeChanged)
self.dark_theme_radio.toggled.connect(self.onThemeChanged)
self.centerDialog(settings_window)
settings_window.exec_()
def onThemeChanged(self):
if self.light_theme_radio.isChecked():
self.settings["theme"] = "light"
self.setStyleSheet("")
elif self.dark_theme_radio.isChecked():
self.settings["theme"] = "dark"
self.applyDarkTheme()
self.saveSettings()
def openAbout(self):
about_window = QtWidgets.QDialog(self)
about_window.setWindowTitle("프로그램 정보")
about_window.setGeometry(100, 100, 400, 300)
about_window.setGeometry(100, 100, 300, 150)
layout = QtWidgets.QVBoxLayout(about_window)
label1 = QtWidgets.QLabel("이 프로그램은 DBC 파일을 C 파일로 변환합니다.")
label1.setAlignment(QtCore.Qt.AlignCenter)
icon_label = QtWidgets.QLabel()
icon_path = os.path.join(os.path.abspath("."), "icon/icon.png")
pixmap = QtGui.QPixmap(icon_path)
scaled_pixmap = pixmap.scaled(100, 100, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
icon_label.setPixmap(scaled_pixmap)
icon_label.setAlignment(QtCore.Qt.AlignCenter)
label3 = QtWidgets.QLabel(f"버전: {self.version}")
label3.setAlignment(QtCore.Qt.AlignCenter)
label1 = QtWidgets.QLabel("DBC Converter")
label1.setAlignment(QtCore.Qt.AlignLeft)
label1.setContentsMargins(20, 5, 0, 0) # 좌측 여백 및 상하 여백 추가
label2 = QtWidgets.QLabel("DBC 파일을 C 파일로 변환")
label2.setAlignment(QtCore.Qt.AlignLeft)
label2.setContentsMargins(20, 5, 0, 0) # 좌측 여백 및 상하 여백 추가
label3 = QtWidgets.QLabel(f"버전 {self.version}")
label3.setAlignment(QtCore.Qt.AlignLeft)
label3.setContentsMargins(20, 5, 0, 0) # 좌측 여백 및 상하 여백 추가
layout.addWidget(icon_label)
layout.addWidget(label1)
layout.addWidget(label2)
layout.addWidget(label3)
layout.addStretch() # 하단 여백 추가
self.centerDialog(about_window)
about_window.setStyleSheet(self.styleSheet()) # 다크 테마 적용
about_window.exec_()
def populateTreeView(self, file_paths):
@ -567,13 +697,9 @@ class MainView(QtWidgets.QMainWindow):
self.progress_bar.setVisible(False)
def onHeaderClicked(self, logicalIndex):
header = self.tree.headerItem()
if header.text(logicalIndex).endswith(""):
self.sortTreeView(logicalIndex, True)
header.setText(logicalIndex, header.text(logicalIndex).replace("", ""))
else:
self.sortTreeView(logicalIndex, False)
header.setText(logicalIndex, header.text(logicalIndex).replace("", ""))
header = self.tree.header()
order = header.sortIndicatorOrder()
self.tree.sortItems(logicalIndex, order)
def onItemDoubleClicked(self, item, column):
if column == 0: # 파일명을 더블클릭한 경우

View File

@ -1,7 +1,5 @@
{
"theme": "light",
"default_save_path": "C:/Users/MSI/Desktop",
"file_paths": [],
"last_opened_dir": "C:/Users/MSI/SynologyDrive/3min_be/한자연/!과제/초안전/#Debug/DBC",
"channel_info": {}
"last_opened_dir": "C:/Users/MSI/SynologyDrive/3min_be/한자연/!과제/초안전/#Debug/DBC"
}