[Code] 기타 수정정

This commit is contained in:
3minbe 2025-01-05 17:45:47 +09:00
parent 98205b70bf
commit 7192e5197b
2 changed files with 85 additions and 10 deletions

View File

@ -3,21 +3,37 @@ import tkinter as tk
from tkinter import filedialog, ttk from tkinter import filedialog, ttk
from tkinter import messagebox from tkinter import messagebox
from datetime import datetime from datetime import datetime
import json
class MainView(tk.Tk): class MainView(tk.Tk):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.setupUI() self.version = "1.0.0" # 프로그램 버전 설정
self.setButtons() self.loadSettings() # 설정 로드
self.setupUI() # UI 설정
self.setButtons() # 버튼 설정
self.sortTreeView('파일명', True) # 기본 파일명 오름차순 정렬 self.sortTreeView('파일명', True) # 기본 파일명 오름차순 정렬
self.bindShortcuts() # 단축키 바인딩
def loadSettings(self):
self.settings_file = "settings.json"
if os.path.exists(self.settings_file):
with open(self.settings_file, "r") as file:
self.settings = json.load(file) # 설정 파일 로드
else:
self.settings = {"theme": "light"} # 기본 설정
def saveSettings(self):
with open(self.settings_file, "w") as file:
json.dump(self.settings, file) # 설정 파일 저장
def setupUI(self): def setupUI(self):
self.title("DBC to C Converter") self.title("DBC to C Converter")
self.geometry("800x600") self.geometry("800x600")
# 아이콘 설정 # 아이콘 설정
# icon_path = "icon/icon.ico" icon_path = "icon/icon.ico"
# self.iconbitmap(icon_path) self.iconbitmap(icon_path)
# 메뉴바 추가 # 메뉴바 추가
self.menu_bar = tk.Menu(self) self.menu_bar = tk.Menu(self)
@ -77,6 +93,7 @@ class MainView(tk.Tk):
tools_menu.add_separator() tools_menu.add_separator()
tools_menu.add_command(label="프로그램 정보", command=self.openAbout) tools_menu.add_command(label="프로그램 정보", command=self.openAbout)
# Treeview 설정
self.tree = ttk.Treeview(self, columns=('파일명', '파일경로', '파일크기'), show='headings') self.tree = ttk.Treeview(self, columns=('파일명', '파일경로', '파일크기'), show='headings')
self.tree.heading('파일명', text='파일명', command=lambda: self.sortTreeView('파일명', False)) self.tree.heading('파일명', text='파일명', command=lambda: self.sortTreeView('파일명', False))
self.tree.heading('파일경로', text='파일경로', command=lambda: self.sortTreeView('파일경로', False)) self.tree.heading('파일경로', text='파일경로', command=lambda: self.sortTreeView('파일경로', False))
@ -89,11 +106,13 @@ class MainView(tk.Tk):
else: else:
self.tree.column(col, stretch=tk.YES) self.tree.column(col, stretch=tk.YES)
# Treeview 이벤트 바인딩
self.tree.bind("<Motion>", self.onTreeMotion) self.tree.bind("<Motion>", self.onTreeMotion)
self.tree.bind("<Leave>", self.onTreeLeave) # 마우스가 Treeview를 떠날 때 이벤트 바인딩 self.tree.bind("<Leave>", self.onTreeLeave) # 마우스가 Treeview를 떠날 때 이벤트 바인딩
self.tree.bind("<Double-1>", self.onTreeDoubleClick) # 더블클릭 이벤트 바인딩 self.tree.bind("<Double-1>", self.onTreeDoubleClick) # 더블클릭 이벤트 바인딩
self.tree.bind("<Button-3>", self.onRightClick) # 우클릭 이벤트 바인딩 self.tree.bind("<Button-3>", self.onRightClick) # 우클릭 이벤트 바인딩
# 알림창 설정
self.alert_frame = tk.Frame(self) self.alert_frame = tk.Frame(self)
self.alert_frame.pack(fill=tk.BOTH, expand=True) self.alert_frame.pack(fill=tk.BOTH, expand=True)
@ -105,23 +124,29 @@ class MainView(tk.Tk):
self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.alert_text.config(yscrollcommand=self.scrollbar.set) self.alert_text.config(yscrollcommand=self.scrollbar.set)
# 버튼 프레임 설정
self.button_frame = tk.Frame(self) self.button_frame = tk.Frame(self)
self.button_frame.pack(fill=tk.X) self.button_frame.pack(fill=tk.X)
self.btn_list = tk.Button(self.button_frame, text="파일 추가", command=self.FilesOpen) # 둥근 모서리를 가진 버튼 추가
self.btn_list = tk.Button(self.button_frame, text="파일 추가", command=self.FilesOpen, relief="solid", borderwidth=1, highlightthickness=0, padx=10, pady=5)
self.btn_list.grid(row=0, column=0, padx=5, pady=5) self.btn_list.grid(row=0, column=0, padx=5, pady=5)
self.btn_delete = tk.Button(self.button_frame, text="파일 삭제", command=self.deleteSelectedFiles) self.btn_delete = tk.Button(self.button_frame, text="파일 삭제", command=self.deleteSelectedFiles, relief="solid", borderwidth=1, highlightthickness=0, padx=10, pady=5)
self.btn_delete.grid(row=0, column=1, padx=5, pady=5) self.btn_delete.grid(row=0, column=1, padx=5, pady=5)
self.btn_delete_all = tk.Button(self.button_frame, text="모든 파일 삭제", command=self.deleteAllFiles) self.btn_delete_all = tk.Button(self.button_frame, text="모든 파일 삭제", command=self.deleteAllFiles, relief="solid", borderwidth=1, highlightthickness=0, padx=10, pady=5)
self.btn_delete_all.grid(row=0, column=2, padx=5, pady=5) self.btn_delete_all.grid(row=0, column=2, padx=5, pady=5)
self.btn_clear_alerts = tk.Button(self.button_frame, text="알림창 내용 삭제", command=self.clearAlerts) self.btn_clear_alerts = tk.Button(self.button_frame, text="알림창 내용 삭제", command=self.clearAlerts, relief="solid", borderwidth=1, highlightthickness=0, padx=10, pady=5)
self.btn_clear_alerts.grid(row=0, column=3, padx=5, pady=5) self.btn_clear_alerts.grid(row=0, column=3, padx=5, pady=5)
self.tree.bind("<Button-1>", self.onTreeClick) self.tree.bind("<Button-1>", self.onTreeClick)
# 초기 테마 설정 적용
if self.settings["theme"] == "light":
self.setLightMode()
def setButtons(self): def setButtons(self):
self.btn_list.config(command=self.FilesOpen) self.btn_list.config(command=self.FilesOpen)
self.btn_delete.config(command=self.deleteSelectedFiles) self.btn_delete.config(command=self.deleteSelectedFiles)
@ -157,6 +182,10 @@ class MainView(tk.Tk):
def deleteAllFiles(self): def deleteAllFiles(self):
all_items = self.tree.get_children() all_items = self.tree.get_children()
if not all_items:
messagebox.showwarning("경고", "삭제할 파일이 없습니다", parent=self)
self.updateAlertText("모든 파일 삭제 실패", ["삭제할 파일이 없습니다"])
return
deleted_files = [self.tree.item(item, 'values')[0] for item in all_items] deleted_files = [self.tree.item(item, 'values')[0] for item in all_items]
for item in all_items: for item in all_items:
self.tree.delete(item) self.tree.delete(item)
@ -183,7 +212,7 @@ class MainView(tk.Tk):
self.tree.tooltip = tk.Toplevel(self.tree) self.tree.tooltip = tk.Toplevel(self.tree)
self.tree.tooltip.wm_overrideredirect(True) self.tree.tooltip.wm_overrideredirect(True)
self.tree.tooltip.wm_geometry(f"+{event.x_root + 20}+{event.y_root + 10}") self.tree.tooltip.wm_geometry(f"+{event.x_root + 20}+{event.y_root + 10}")
label = tk.Label(self.tree.tooltip, text=value, background="yellow", relief="solid", borderwidth=1, font=("Arial", 10, "normal")) label = tk.Label(self.tree.tooltip, text=value, background="white", relief="solid", borderwidth=1, font=("Arial", 10, "normal"))
label.pack() label.pack()
def onTreeLeave(self, event): def onTreeLeave(self, event):
@ -300,13 +329,58 @@ class MainView(tk.Tk):
settings_window = tk.Toplevel(self) settings_window = tk.Toplevel(self)
settings_window.title("설정") settings_window.title("설정")
settings_window.geometry("400x300") settings_window.geometry("400x300")
self.centerWindow(settings_window)
settings_window.bind('<Escape>', lambda event: settings_window.destroy())
tk.Label(settings_window, text="설정 창입니다.").pack(pady=20) tk.Label(settings_window, text="설정 창입니다.").pack(pady=20)
def openAbout(self): def openAbout(self):
about_window = tk.Toplevel(self) about_window = tk.Toplevel(self)
about_window.title("프로그램 정보") about_window.title("프로그램 정보")
about_window.geometry("400x300") about_window.geometry("400x300")
tk.Label(about_window, text="프로그램 정보 창입니다.").pack(pady=20) self.centerWindow(about_window)
about_window.bind('<Escape>', lambda event: about_window.destroy())
tk.Label(about_window, text="\n\n이 프로그램은 DBC 파일을 C 파일로 변환합니다.\n\n").pack(pady=20)
tk.Label(about_window, text="프로그램 정보").pack(pady=10)
tk.Label(about_window, text=f"버전: {self.version}").pack(pady=10)
def centerWindow(self, window):
window.update_idletasks()
x = self.winfo_x() + (self.winfo_width() // 2) - (window.winfo_width() // 2)
y = self.winfo_y() + (self.winfo_height() // 2) - (window.winfo_height() // 2)
window.geometry(f"+{x}+{y}")
def setLightMode(self):
self.configure(bg="white")
self.alert_text.configure(bg="white", fg="black")
self.tree.configure(style="Light.Treeview")
self.menu_bar.configure(bg="white", fg="black")
for menu in self.menu_bar.winfo_children():
menu.configure(bg="white", fg="black")
self.button_frame.configure(bg="white")
for button in self.button_frame.winfo_children():
button.configure(bg="white", fg="black", activebackground="white", activeforeground="black")
self.alert_frame.configure(bg="white")
self.scrollbar.configure(bg="white")
def bindShortcuts(self):
self.bind('<Control-a>', lambda event: self.selectAllFiles())
self.bind('<Delete>', lambda event: self.deleteSelectedFiles())
self.bind('<Home>', lambda event: self.selectFirstFile())
self.bind('<End>', lambda event: self.selectLastFile())
def selectFirstFile(self):
items = self.tree.get_children()
if items:
self.tree.selection_set(items[0])
self.tree.focus(items[0])
self.tree.see(items[0])
def selectLastFile(self):
items = self.tree.get_children()
if items:
self.tree.selection_set(items[-1])
self.tree.focus(items[-1])
self.tree.see(items[-1])
if __name__ == '__main__': if __name__ == '__main__':
app = MainView() app = MainView()

1
settings.json Normal file
View File

@ -0,0 +1 @@
{"theme": "light"}