mirror of
https://github.com/3minbe/DBC_Converter.git
synced 2026-05-17 01:23:58 +09:00
[Code] 기타 수정정
This commit is contained in:
parent
98205b70bf
commit
7192e5197b
@ -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
1
settings.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"theme": "light"}
|
||||||
Loading…
Reference in New Issue
Block a user