[Code] 기타 버그 수정

This commit is contained in:
3minbe 2025-01-06 21:08:21 +09:00
parent 14ce178fe6
commit 9358ef91a3
7 changed files with 147 additions and 89 deletions

View File

@ -13,9 +13,9 @@ class MainView(QtWidgets.QMainWindow):
self.file_paths = [] # 파일 경로 저장 리스트
self.loadSettings() # 설정 로드
self.setupUI() # UI 설정
self.setButtons() # 버튼 설정
self.centerWindow() # 창을 화면 중앙에 위치
self.sortTreeView(0, True) # 기본 파일명 오름차순 정렬
self.channel_options = ["채널 1", "채널 2", "채널 3"] # 채널 옵션 설정
self.channel_options = ["1", "2", "3", "4", "5", "6"] # 채널 옵션 설정
def loadSettings(self):
self.settings_file = "settings.json"
@ -24,17 +24,17 @@ class MainView(QtWidgets.QMainWindow):
self.settings = json.load(file) # 설정 파일 로드
self.default_save_path = self.settings.get("default_save_path", self.default_save_path)
self.file_paths = self.settings.get("file_paths", [])
self.last_opened_dir = self.settings.get("last_opened_dir", os.path.expanduser("~"))
else:
self.settings = {"theme": "light"} # 기본 설정
self.last_opened_dir = os.path.expanduser("~")
def saveSettings(self):
settings = {
"theme": self.settings.get("theme", "light"),
"default_save_path": self.default_save_path,
"file_paths": self.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(settings, file, ensure_ascii=False) # 설정 파일 저장
json.dump(self.settings, file, ensure_ascii=False, indent=4) # 설정 파일 저장
def setupUI(self):
self.setWindowTitle("DBC to C Converter")
@ -49,44 +49,88 @@ class MainView(QtWidgets.QMainWindow):
tools_menu = self.menu_bar.addMenu("도구")
# 파일 메뉴 항목 추가
file_menu.addAction("파일 추가", self.FilesOpen)
file_menu.addSeparator()
file_menu.addAction("선택 파일 삭제", self.deleteSelectedFiles)
file_menu.addSeparator()
file_menu.addAction("모든 파일 삭제", self.deleteAllFiles)
add_file_action = QtWidgets.QAction("파일 추가", self)
add_file_action.setShortcut('Ctrl+O')
add_file_action.triggered.connect(self.FilesOpen)
file_menu.addAction(add_file_action)
delete_selected_action = QtWidgets.QAction("선택 파일 삭제", self)
delete_selected_action.setShortcut('Delete')
delete_selected_action.triggered.connect(self.deleteSelectedFiles)
file_menu.addAction(delete_selected_action)
delete_all_action = QtWidgets.QAction("모든 파일 삭제", self)
delete_all_action.setShortcut('Ctrl+Shift+Delete')
delete_all_action.triggered.connect(self.deleteAllFiles)
file_menu.addAction(delete_all_action)
# 편집 메뉴 항목 추가
edit_menu.addAction("모두 선택", self.selectAllFiles)
edit_menu.addSeparator()
edit_menu.addAction("선택 반전", self.invertSelection)
select_all_action = QtWidgets.QAction("모두 선택", self)
select_all_action.setShortcut('Ctrl+A')
select_all_action.triggered.connect(self.selectAllFiles)
edit_menu.addAction(select_all_action)
invert_selection_action = QtWidgets.QAction("선택 반전", self)
invert_selection_action.setShortcut('Ctrl+I')
invert_selection_action.triggered.connect(self.invertSelection)
edit_menu.addAction(invert_selection_action)
# 보기 메뉴 항목 추가
size_menu = view_menu.addMenu("창크기")
size_menu.addAction("작게", lambda: self.setWindowSize("small"))
size_menu.addSeparator()
size_menu.addAction("보통", lambda: self.setWindowSize("medium"))
size_menu.addSeparator()
size_menu.addAction("크게", lambda: self.setWindowSize("large"))
size_menu.addSeparator()
size_menu.addAction("자동", lambda: self.setWindowSize("auto"))
size_menu.addAction("작게", lambda: self.setWindowSize("small")).setShortcut('Ctrl+1')
size_menu.addAction("보통", lambda: self.setWindowSize("medium")).setShortcut('Ctrl+2')
size_menu.addAction("크게", lambda: self.setWindowSize("large")).setShortcut('Ctrl+3')
size_menu.addAction("자동", lambda: self.setWindowSize("auto")).setShortcut('Ctrl+4')
sort_menu = view_menu.addMenu("정렬")
sort_menu.addAction("파일명 오름차순", lambda: self.sortTreeView(0, False))
sort_menu.addSeparator()
sort_menu.addAction("파일명 내림차순", lambda: self.sortTreeView(0, True))
sort_menu.addSeparator()
sort_menu.addAction("파일경로 오름차순", lambda: self.sortTreeView(1, False))
sort_menu.addSeparator()
sort_menu.addAction("파일경로 내림차순", lambda: self.sortTreeView(1, True))
sort_menu.addSeparator()
sort_menu.addAction("파일크기 오름차순", lambda: self.sortTreeView(3, False))
sort_menu.addSeparator()
sort_menu.addAction("파일크기 내림차순", lambda: self.sortTreeView(3, True))
sort_menu.addAction("파일명 오름차순", lambda: self.sortTreeView(0, False)).setShortcut('Ctrl+Shift+N')
sort_menu.addAction("파일명 내림차순", lambda: self.sortTreeView(0, True)).setShortcut('Ctrl+Shift+M')
sort_menu.addAction("파일경로 오름차순", lambda: self.sortTreeView(1, False)).setShortcut('Ctrl+Shift+P')
sort_menu.addAction("파일경로 내림차순", lambda: self.sortTreeView(1, True)).setShortcut('Ctrl+Shift+Q')
sort_menu.addAction("파일크기 오름차순", lambda: self.sortTreeView(3, False)).setShortcut('Ctrl+Shift+S')
sort_menu.addAction("파일크기 내림차순", lambda: self.sortTreeView(3, True)).setShortcut('Ctrl+Shift+T')
# 도구 메뉴 항목 추가
tools_menu.addAction("설정", self.openSettings)
tools_menu.addSeparator()
tools_menu.addAction("프로그램 정보", self.openAbout)
settings_action = QtWidgets.QAction("설정", self)
settings_action.setShortcut('Ctrl+P')
settings_action.triggered.connect(self.openSettings)
tools_menu.addAction(settings_action)
about_action = QtWidgets.QAction("프로그램 정보", self)
about_action.setShortcut('Ctrl+I')
about_action.triggered.connect(self.openAbout)
tools_menu.addAction(about_action)
# 툴바 추가
self.toolbar = self.addToolBar("Main Toolbar")
add_file_action = QtWidgets.QAction(QtGui.QIcon("img/add_file.png"), "파일 추가", self)
add_file_action.setShortcut('Ctrl+O')
add_file_action.triggered.connect(self.FilesOpen)
self.toolbar.addAction(add_file_action)
delete_file_action = QtWidgets.QAction(QtGui.QIcon("img/delete_file.png"), "선택 파일 삭제", self)
delete_file_action.setShortcut('Delete')
delete_file_action.triggered.connect(self.deleteSelectedFiles)
self.toolbar.addAction(delete_file_action)
delete_all_action = QtWidgets.QAction(QtGui.QIcon("img/delete_all.png"), "모든 파일 삭제", self)
delete_all_action.setShortcut('Ctrl+Shift+Delete')
delete_all_action.triggered.connect(self.deleteAllFiles)
self.toolbar.addAction(delete_all_action)
delete_description_action = QtWidgets.QAction(QtGui.QIcon("img/delete_description.png"), "알림창 내용 삭제", self)
delete_description_action.setShortcut('Ctrl+Shift+D')
delete_description_action.triggered.connect(self.clearAlerts)
self.toolbar.addAction(delete_description_action)
convert_action = QtWidgets.QAction(QtGui.QIcon("img/convert.png"), "변환", self)
convert_action.setShortcut('Ctrl+R')
convert_action.triggered.connect(self.convertFiles)
self.toolbar.addAction(convert_action)
# 상태바 추가
self.status_bar = self.statusBar()
self.status_bar.showMessage("준비 완료")
# 메인 위젯 설정
main_widget = QtWidgets.QWidget()
@ -97,60 +141,37 @@ class MainView(QtWidgets.QMainWindow):
self.tree = QtWidgets.QTreeWidget()
self.tree.setColumnCount(4)
self.tree.setHeaderLabels(['파일명', '파일경로', '채널', '파일크기'])
self.tree.setColumnWidth(0, 400) # 파일명 너비 설정
self.tree.setColumnWidth(1, 450) # 파일경로 너비 설정
self.tree.setColumnWidth(2, 50) # 채널 너비 설정
self.tree.setColumnWidth(3, 50) # 파일크기 너비 설정
self.tree.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
self.tree.header().sectionClicked.connect(self.onHeaderClicked)
self.tree.itemDoubleClicked.connect(self.onItemDoubleClicked)
main_layout.addWidget(self.tree)
# 버튼 프레임 설정
button_frame = QtWidgets.QWidget()
button_layout = QtWidgets.QHBoxLayout(button_frame)
main_layout.addWidget(button_frame)
self.btn_list = QtWidgets.QPushButton("파일 추가")
self.btn_list.clicked.connect(self.FilesOpen)
button_layout.addWidget(self.btn_list)
self.btn_delete = QtWidgets.QPushButton("파일 삭제")
self.btn_delete.clicked.connect(self.deleteSelectedFiles)
button_layout.addWidget(self.btn_delete)
self.btn_delete_all = QtWidgets.QPushButton("모든 파일 삭제")
self.btn_delete_all.clicked.connect(self.deleteAllFiles)
button_layout.addWidget(self.btn_delete_all)
self.btn_convert = QtWidgets.QPushButton("변환")
self.btn_convert.clicked.connect(self.convertFiles)
button_layout.addWidget(self.btn_convert)
self.btn_clear_alerts = QtWidgets.QPushButton("알림창 내용 삭제")
self.btn_clear_alerts.clicked.connect(self.clearAlerts)
button_layout.addWidget(self.btn_clear_alerts)
# 알림창 설정
self.alert_text = QtWidgets.QTextEdit()
self.alert_text.setReadOnly(True)
main_layout.addWidget(self.alert_text)
# 초기 테마 설정 적용
if self.settings["theme"] == "light":
self.setLightMode()
def centerWindow(self):
frame_geometry = self.frameGeometry()
screen_center = QtWidgets.QDesktopWidget().availableGeometry().center()
frame_geometry.moveCenter(screen_center)
self.move(frame_geometry.topLeft())
def setButtons(self):
self.btn_list.clicked.disconnect()
self.btn_delete.clicked.disconnect()
self.btn_delete_all.clicked.disconnect()
self.btn_clear_alerts.clicked.disconnect()
self.btn_list.clicked.connect(self.FilesOpen)
self.btn_delete.clicked.connect(self.deleteSelectedFiles)
self.btn_delete_all.clicked.connect(self.deleteAllFiles)
self.btn_clear_alerts.clicked.connect(self.clearAlerts)
def centerDialog(self, dialog):
dialog_geometry = dialog.frameGeometry()
dialog_geometry.moveCenter(self.frameGeometry().center())
dialog.move(dialog_geometry.topLeft())
def FilesOpen(self):
file_paths, _ = QtWidgets.QFileDialog.getOpenFileNames(
self, "파일 열기", "", "DBC 파일 (*.dbc);;모든 파일 (*.*)"
self, "파일 열기", self.last_opened_dir, "DBC 파일 (*.dbc);;모든 파일 (*.*)"
)
if file_paths:
self.last_opened_dir = os.path.dirname(file_paths[0])
existing_files = [self.tree.topLevelItem(i).text(0) for i in range(self.tree.topLevelItemCount())]
duplicate_files = [os.path.split(file_path)[1] for file_path in file_paths if os.path.split(file_path)[1] in existing_files]
new_files = [file_path for file_path in file_paths if os.path.split(file_path)[1] not in existing_files]
@ -162,6 +183,7 @@ class MainView(QtWidgets.QMainWindow):
self.populateTreeView(new_files)
self.file_paths.extend(new_files) # 파일 경로 저장
self.updateAlertText(f"파일 추가 완료", [os.path.split(file_path)[1] for file_path in new_files])
self.saveSettings()
def deleteSelectedFiles(self):
selected_items = self.tree.selectedItems()
@ -174,6 +196,7 @@ class MainView(QtWidgets.QMainWindow):
index = self.tree.indexOfTopLevelItem(item)
self.tree.takeTopLevelItem(index)
self.updateAlertText(f"파일 삭제 완료", deleted_files)
self.saveSettings()
def deleteAllFiles(self):
if self.tree.topLevelItemCount() == 0:
@ -183,6 +206,7 @@ class MainView(QtWidgets.QMainWindow):
deleted_files = [self.tree.topLevelItem(i).text(0) for i in range(self.tree.topLevelItemCount())]
self.tree.clear()
self.updateAlertText(f"모든 파일 삭제 완료", deleted_files)
self.saveSettings()
def clearAlerts(self):
self.alert_text.clear()
@ -198,9 +222,9 @@ class MainView(QtWidgets.QMainWindow):
duplicate_files_str = "\n".join(duplicate_files)
new_files_str = "\n".join(new_files_names)
if new_files:
self.showWarning("중복 파일 경고", f"중복 파일이 존재합니다\n\n{duplicate_files_str}\n\n\n중복 파일을 제외한 신규 파일을 추가합니다\n\n{new_files_str}")
self.showWarning("중복 파일 경고", f"**중복 파일이 존재합니다**\n\n{duplicate_files_str}\n\n\n**중복 파일을 제외한 신규 파일을 추가합니다**\n\n{new_files_str}")
else:
self.showWarning("중복 파일 경고", f"중복 파일이 존재합니다\n\n{duplicate_files_str}")
self.showWarning("중복 파일 경고", f"**중복 파일이 존재합니다**\n\n{duplicate_files_str}")
def sortTreeView(self, col, reverse):
items = []
@ -238,6 +262,7 @@ class MainView(QtWidgets.QMainWindow):
label = QtWidgets.QLabel("설정 창입니다.")
label.setAlignment(QtCore.Qt.AlignCenter)
layout.addWidget(label)
self.centerDialog(settings_window)
settings_window.exec_()
def openAbout(self):
@ -254,19 +279,9 @@ class MainView(QtWidgets.QMainWindow):
label3 = QtWidgets.QLabel(f"버전: {self.version}")
label3.setAlignment(QtCore.Qt.AlignCenter)
layout.addWidget(label3)
self.centerDialog(about_window)
about_window.exec_()
def setLightMode(self):
self.setStyleSheet("background-color: white; color: black;")
self.alert_text.setStyleSheet("background-color: white; color: black;")
self.tree.setStyleSheet("background-color: white; color: black;")
self.menu_bar.setStyleSheet("background-color: white; color: black;")
self.btn_list.setStyleSheet("background-color: white; color: black;")
self.btn_delete.setStyleSheet("background-color: white; color: black;")
self.btn_delete_all.setStyleSheet("background-color: white; color: black;")
self.btn_convert.setStyleSheet("background-color: white; color: black;")
self.btn_clear_alerts.setStyleSheet("background-color: white; color: black;")
def populateTreeView(self, file_paths):
def format_file_size(size_in_bytes):
size_in_kb = size_in_bytes / 1024
@ -284,6 +299,7 @@ class MainView(QtWidgets.QMainWindow):
for file in file_list:
self.alert_text.append(f" - {file}")
self.alert_text.setAlignment(QtCore.Qt.AlignLeft)
self.alert_text.setStyleSheet("QTextEdit { line-height: 2.5; }")
def convertFiles(self):
for file_path in self.file_paths:
@ -309,6 +325,35 @@ class MainView(QtWidgets.QMainWindow):
os.startfile(file_path)
elif column == 1: # 경로를 더블클릭한 경우
os.startfile(item.text(1))
elif column == 2: # 채널을 더블클릭한 경우
self.openChannelDialog(item)
def openChannelDialog(self, item):
channel_dialog = QtWidgets.QDialog(self)
channel_dialog.setWindowTitle("채널 선택")
channel_dialog.setGeometry(100, 100, 200, 100)
layout = QtWidgets.QVBoxLayout(channel_dialog)
channel_combo = QtWidgets.QComboBox()
channel_combo.addItems(self.channel_options)
layout.addWidget(channel_combo)
button_layout = QtWidgets.QHBoxLayout()
apply_button = QtWidgets.QPushButton("확인")
apply_button.clicked.connect(lambda: self.applyChannelSelection(item, channel_combo, channel_dialog))
button_layout.addWidget(apply_button)
cancel_button = QtWidgets.QPushButton("취소")
cancel_button.clicked.connect(channel_dialog.close)
button_layout.addWidget(cancel_button)
layout.addLayout(button_layout)
self.centerDialog(channel_dialog)
channel_dialog.exec_()
def applyChannelSelection(self, item, combo, dialog):
item.setText(2, combo.currentText())
dialog.close()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)

BIN
img/add_file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
img/convert.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
img/delete_all.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
img/delete_description.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
img/delete_file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1 +1,14 @@
{"theme": "light"}
{
"theme": "light",
"default_save_path": "C:\\Users\\blueb\\Desktop",
"file_paths": [
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/240906_VCU_SCU_RWS.dbc",
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/CAN_2023WRS_RG3EV_231123_VCU_EMB.dbc",
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/240906_VCU_SCU_RWS.dbc",
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/241007_primary_HyperSafe4.dbc",
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/CAN_2023WRS_RG3EV_240626_VCU_BCU.dbc",
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/CANFD_SAFETY_v7.dbc",
"C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC/IMU_SBW_20240826.dbc"
],
"last_opened_dir": "C:/Users/blueb/SynologyDrive/3min_be/한자연/!사업/초안전/#Debug/DBC"
}