mirror of
https://github.com/3minbe/DBC_Converter.git
synced 2026-05-17 01:23:58 +09:00
다크 테마 지원 추가 및 설정 창에서 테마 선택 기능 구현 / 정렬 기능 추가가
This commit is contained in:
parent
35cc1669b1
commit
c74707415c
182
DBC_Converter.py
182
DBC_Converter.py
@ -102,24 +102,119 @@ class MainView(QtWidgets.QMainWindow):
|
|||||||
self.setupCloseEvent() # 프로그램 종료 이벤트 설정
|
self.setupCloseEvent() # 프로그램 종료 이벤트 설정
|
||||||
self.tree.itemSelectionChanged.connect(self.onFileSelectionChanged)
|
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):
|
def loadSettings(self):
|
||||||
global channel_info, file_paths
|
|
||||||
self.settings_file = "settings.json"
|
self.settings_file = "settings.json"
|
||||||
if os.path.exists(self.settings_file):
|
if os.path.exists(self.settings_file):
|
||||||
with open(self.settings_file, "r", encoding="utf-8") as file:
|
with open(self.settings_file, "r", encoding="utf-8") as file:
|
||||||
self.settings = json.load(file) # 설정 파일 로드
|
self.settings = json.load(file) # 설정 파일 로드
|
||||||
self.default_save_path = self.settings.get("default_save_path", os.path.join(os.path.expanduser("~"), "Desktop"))
|
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.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:
|
else:
|
||||||
self.settings = {"theme": "light"} # 기본 설정
|
self.settings = {"theme": "light"} # 기본 설정
|
||||||
self.default_save_path = os.path.join(os.path.expanduser("~"), "Desktop") # 바탕화면 경로 설정
|
self.default_save_path = os.path.join(os.path.expanduser("~"), "Desktop") # 바탕화면 경로 설정
|
||||||
self.last_opened_dir = os.path.expanduser("~")
|
self.last_opened_dir = os.path.expanduser("~")
|
||||||
|
|
||||||
def saveSettings(self):
|
def saveSettings(self):
|
||||||
global channel_info, file_paths
|
|
||||||
self.settings["default_save_path"] = self.default_save_path
|
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
|
self.settings["last_opened_dir"] = self.last_opened_dir
|
||||||
with open(self.settings_file, "w", encoding="utf-8") as file:
|
with open(self.settings_file, "w", encoding="utf-8") as file:
|
||||||
json.dump(self.settings, file, ensure_ascii=False, indent=4) # 설정 파일 저장
|
json.dump(self.settings, file, ensure_ascii=False, indent=4) # 설정 파일 저장
|
||||||
@ -244,6 +339,7 @@ class MainView(QtWidgets.QMainWindow):
|
|||||||
self.tree = QtWidgets.QTreeWidget()
|
self.tree = QtWidgets.QTreeWidget()
|
||||||
self.tree.setColumnCount(4)
|
self.tree.setColumnCount(4)
|
||||||
self.tree.setHeaderLabels(['파일명', '파일경로', '채널', '파일크기'])
|
self.tree.setHeaderLabels(['파일명', '파일경로', '채널', '파일크기'])
|
||||||
|
self.tree.setSortingEnabled(True) # 정렬 기능 활성화
|
||||||
self.tree.setColumnWidth(0, 400) # 파일명 너비 설정
|
self.tree.setColumnWidth(0, 400) # 파일명 너비 설정
|
||||||
self.tree.setColumnWidth(1, 450) # 파일경로 너비 설정
|
self.tree.setColumnWidth(1, 450) # 파일경로 너비 설정
|
||||||
self.tree.setColumnWidth(2, 50) # 채널 너비 설정
|
self.tree.setColumnWidth(2, 50) # 채널 너비 설정
|
||||||
@ -389,7 +485,6 @@ class MainView(QtWidgets.QMainWindow):
|
|||||||
for item in selected_items:
|
for item in selected_items:
|
||||||
index = self.tree.indexOfTopLevelItem(item)
|
index = self.tree.indexOfTopLevelItem(item)
|
||||||
file_path = os.path.join(item.text(1), item.text(0))
|
file_path = os.path.join(item.text(1), item.text(0))
|
||||||
self.removeChannelInfo(file_path) # 채널 정보 제거
|
|
||||||
self.tree.takeTopLevelItem(index)
|
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.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)
|
self.updateAlertText(f"파일 삭제 완료", deleted_files)
|
||||||
@ -404,18 +499,11 @@ class MainView(QtWidgets.QMainWindow):
|
|||||||
for i in range(self.tree.topLevelItemCount()):
|
for i in range(self.tree.topLevelItemCount()):
|
||||||
item = self.tree.topLevelItem(i)
|
item = self.tree.topLevelItem(i)
|
||||||
file_path = os.path.join(item.text(1), item.text(0))
|
file_path = os.path.join(item.text(1), item.text(0))
|
||||||
self.removeChannelInfo(file_path) # 채널 정보 제거
|
|
||||||
self.tree.clear()
|
self.tree.clear()
|
||||||
self.file_paths = []
|
self.file_paths = []
|
||||||
self.updateAlertText(f"모든 파일 삭제 완료", deleted_files)
|
self.updateAlertText(f"모든 파일 삭제 완료", deleted_files)
|
||||||
self.saveSettings()
|
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):
|
def clearAlerts(self):
|
||||||
self.alert_text.clear()
|
self.alert_text.clear()
|
||||||
|
|
||||||
@ -470,29 +558,71 @@ class MainView(QtWidgets.QMainWindow):
|
|||||||
def openSettings(self):
|
def openSettings(self):
|
||||||
settings_window = QtWidgets.QDialog(self)
|
settings_window = QtWidgets.QDialog(self)
|
||||||
settings_window.setWindowTitle("설정")
|
settings_window.setWindowTitle("설정")
|
||||||
settings_window.setGeometry(100, 100, 400, 300)
|
settings_window.setGeometry(100, 100, 800, 600)
|
||||||
layout = QtWidgets.QVBoxLayout(settings_window)
|
layout = QtWidgets.QVBoxLayout(settings_window)
|
||||||
label = QtWidgets.QLabel("설정 창입니다.")
|
|
||||||
label.setAlignment(QtCore.Qt.AlignCenter)
|
theme_label = QtWidgets.QLabel("테마 선택:")
|
||||||
layout.addWidget(label)
|
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)
|
self.centerDialog(settings_window)
|
||||||
settings_window.exec_()
|
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):
|
def openAbout(self):
|
||||||
about_window = QtWidgets.QDialog(self)
|
about_window = QtWidgets.QDialog(self)
|
||||||
about_window.setWindowTitle("프로그램 정보")
|
about_window.setWindowTitle("프로그램 정보")
|
||||||
about_window.setGeometry(100, 100, 400, 300)
|
about_window.setGeometry(100, 100, 300, 150)
|
||||||
layout = QtWidgets.QVBoxLayout(about_window)
|
layout = QtWidgets.QVBoxLayout(about_window)
|
||||||
|
|
||||||
label1 = QtWidgets.QLabel("이 프로그램은 DBC 파일을 C 파일로 변환합니다.")
|
icon_label = QtWidgets.QLabel()
|
||||||
label1.setAlignment(QtCore.Qt.AlignCenter)
|
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}")
|
label1 = QtWidgets.QLabel("DBC Converter")
|
||||||
label3.setAlignment(QtCore.Qt.AlignCenter)
|
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(label1)
|
||||||
|
layout.addWidget(label2)
|
||||||
layout.addWidget(label3)
|
layout.addWidget(label3)
|
||||||
|
layout.addStretch() # 하단 여백 추가
|
||||||
self.centerDialog(about_window)
|
self.centerDialog(about_window)
|
||||||
|
about_window.setStyleSheet(self.styleSheet()) # 다크 테마 적용
|
||||||
about_window.exec_()
|
about_window.exec_()
|
||||||
|
|
||||||
def populateTreeView(self, file_paths):
|
def populateTreeView(self, file_paths):
|
||||||
@ -567,13 +697,9 @@ class MainView(QtWidgets.QMainWindow):
|
|||||||
self.progress_bar.setVisible(False)
|
self.progress_bar.setVisible(False)
|
||||||
|
|
||||||
def onHeaderClicked(self, logicalIndex):
|
def onHeaderClicked(self, logicalIndex):
|
||||||
header = self.tree.headerItem()
|
header = self.tree.header()
|
||||||
if header.text(logicalIndex).endswith("▲"):
|
order = header.sortIndicatorOrder()
|
||||||
self.sortTreeView(logicalIndex, True)
|
self.tree.sortItems(logicalIndex, order)
|
||||||
header.setText(logicalIndex, header.text(logicalIndex).replace("▲", "▼"))
|
|
||||||
else:
|
|
||||||
self.sortTreeView(logicalIndex, False)
|
|
||||||
header.setText(logicalIndex, header.text(logicalIndex).replace("▼", "▲"))
|
|
||||||
|
|
||||||
def onItemDoubleClicked(self, item, column):
|
def onItemDoubleClicked(self, item, column):
|
||||||
if column == 0: # 파일명을 더블클릭한 경우
|
if column == 0: # 파일명을 더블클릭한 경우
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
{
|
{
|
||||||
"theme": "light",
|
"theme": "light",
|
||||||
"default_save_path": "C:/Users/MSI/Desktop",
|
"default_save_path": "C:/Users/MSI/Desktop",
|
||||||
"file_paths": [],
|
"last_opened_dir": "C:/Users/MSI/SynologyDrive/3min_be/한자연/!과제/초안전/#Debug/DBC"
|
||||||
"last_opened_dir": "C:/Users/MSI/SynologyDrive/3min_be/한자연/!과제/초안전/#Debug/DBC",
|
|
||||||
"channel_info": {}
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user