Python/이것저것 파이썬

Boilerplate Copier

컴닥 2023. 12. 25. 01:42
반응형

관용구를 txt파일로 관리하는 프로그램.

text 폴더에 txt파일 형식으로 저장해 두면 되고, 폴더는 1단계만 지원된다.. 

좌측 트리에서 파일을 선택하면 그 내용이 클립보드에 올라간다. 

원하는 곳에 붙여 넣기만 하면 된다.  

pip install pyperclip
import os
import tkinter as tk
from tkinter import ttk, filedialog, messagebox

import pyperclip


def browse_folder():
    folder_path = filedialog.askdirectory()
    if folder_path:
        show_folder_structure(folder_path)


def show_folder_structure(folder_path):
    tree.delete(*tree.get_children())
    tree.heading("#0", text=os.path.abspath(folder_path), anchor='w')
    display_folder_contents(folder_path, '')


def display_folder_contents(folder_path, parent):
    for item in os.listdir(folder_path):
        item_path = os.path.join(folder_path, item)
        is_folder = os.path.isdir(item_path)
        item_id = tree.insert(parent, 'end', text=item, open=False, tags=('folder' if is_folder else 'file', item_path))
        if is_folder:
            display_folder_contents(item_path, item_id)


def show_file_content(event):
    file_content_text.config(state=tk.NORMAL)
    file_content_text.delete('1.0', tk.END)
    if not tree.selection():
        browse_folder()
        return
    selected_item = tree.selection()[0]
    tag, item_path = tree.item(selected_item, 'tags')
    if tag == 'file' and os.path.isfile(item_path):
        with open(item_path, 'r', encoding='utf-8') as file:
            content = file.read()
        pyperclip.copy(content)
        file_content_text.delete('1.0', tk.END)
        file_content_text.insert(tk.END, content)
        file_content_text.config(state=tk.DISABLED)
        messagebox.showinfo('Copied!', os.path.abspath(item_path))


root = tk.Tk()
root.title("Boilerplate Copier")
root.wm_attributes("-topmost", True)
if os.path.isfile(path := os.path.join(os.path.dirname(__file__), 'file_icon.ico')):
    root.iconbitmap(path)

# Folder Structure Frame
frame = ttk.Frame(root)
frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

tree = ttk.Treeview(frame)
tree.heading("#0", text="Browser Folder First", anchor='w')

scrollbar = ttk.Scrollbar(frame, orient='vertical', command=tree.yview)
tree.configure(yscroll=scrollbar.set)
scrollbar.pack(side='right', fill='y')
tree.pack(expand=True, fill=tk.BOTH)

browse_button = ttk.Button(frame, text="Browse", command=browse_folder)
browse_button.pack(side=tk.BOTTOM)

# File Content Frame
file_content_frame = ttk.Frame(root)
file_content_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

file_content_text = tk.Text(file_content_frame, wrap=tk.WORD, height=20, width=50)
file_content_text.pack(expand=True, fill=tk.BOTH)

# Bind tree selection event to show file content
tree.bind("<ButtonRelease-1>", show_file_content)

if not os.path.isdir(r'.\text'):
    os.mkdir(r'.\text')
show_folder_structure(r'.\text')

root.mainloop()
반응형