플그래밍/파이써언

[파이썬] 폴더 내 파일명 추출 - tkinter

훗티v 2023. 3. 26. 18:14
728x90
반응형

실행화면

 

선택한 폴더 내 파일 목록을 보여주는 Tkinter 모듈로 만든 간단한 윈도우즈 앱입니다.

- 앱 실행 시 먼저 실행파일이 위치한 폴더의 파일목록을 표시해줍니다.

- 상단에는 현재 폴더의 위치를 표시해주는 위젯과 폴더 선택을 위한 버튼 위젯이 위치해있습니다.

- 파일명과 파일 크기를 Treeview에 담아 각각 열1, 열2에 표시해줍니다.

- 헤딩을 클릭하여 오름차순 및 내림차순으로 목록을 나열할 수 있습니다.

- 트리뷰 우측에 파일 목록 탐색을 위한 스크롤바를 적용하였습니다.

- 커맨드창을 숨기기위해 파이썬 실행파일의 확장자는 pyw로 설정하였습니다.

 

코드

import os
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk

def select_folder():
    folder_path = filedialog.askdirectory()
    if folder_path:
        path_var.set(folder_path)
        get_files()

def get_files(sort_by=None, descending=False):
    files = os.listdir(path_var.get())
    if sort_by is not None:
        files.sort(key=lambda x: getattr(os.path, sort_by)(os.path.join(path_var.get(), x)), reverse=descending)
    treeview.delete(*treeview.get_children())
    for file in files:
        if os.path.isfile(os.path.join(path_var.get(), file)):
            file_size = os.path.getsize(os.path.join(path_var.get(), file))
            file_name = f"{file}"
            treeview.insert('', tk.END, text=file_name, values=(file_size))

def toggle_sort_order(col):
    global sort_col, descending
    if sort_col == col:
        descending = not descending
    else:
        sort_col = col
        descending = False
    get_files(sort_by=sort_col, descending=descending)

root = tk.Tk()
root.title('파일 목록')

path_var = tk.StringVar()
path_var.set(os.getcwd())

folder_label = tk.Label(root, text='폴더:')
folder_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")

path_entry = tk.Entry(root, textvariable=path_var)
path_entry.grid(row=0, column=1, padx=5, pady=5, sticky="ew")

select_folder_btn = tk.Button(root, text='폴더 선택', command=select_folder)
select_folder_btn.grid(row=0, column=2, padx=5, pady=5, sticky="e")

treeview_frame = tk.Frame(root)
treeview_frame.grid(row=1, column=0, columnspan=3, padx=5, pady=5, sticky='nsew')

treeview = ttk.Treeview(treeview_frame, columns=("File Size",))
treeview.pack(side=tk.LEFT, fill=tk.BOTH, pady=5, expand=True)

scrollbar = ttk.Scrollbar(treeview_frame, orient=tk.VERTICAL, command=treeview.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

style = ttk.Style(root)
style.theme_use("clam")
style.configure("Treeview.Heading", background="#F5F6F7", foreground="black")

treeview.config(yscrollcommand=scrollbar.set)

treeview.heading("#0", text="파일명", command=lambda: toggle_sort_order('basename'))
treeview.column("#0", width=400)
treeview.heading("File Size", text="파일 크기 (Bytes)", command=lambda: toggle_sort_order('getsize'))
treeview.column("File Size", width=150)

sort_col = None
descending = False

get_files(sort_by=sort_col, descending=descending)

root.columnconfigure(0, weight=0)
root.columnconfigure(1, weight=8)
root.columnconfigure(2, weight=0)
root.rowconfigure(1, weight=1)

window_width = 600
window_height = 300

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

x = int((screen_width - window_width) / 2)
y = int((screen_height - window_height) / 2)

root.geometry(f"{window_width}x{window_height}+{x}+{y}")

root.mainloop()

 

 

 

 

 

[플그래밍/파이써언] - [파이썬] 간단한 텍스트 에디터 (열기, 조회, 수정, 저장)

[플그래밍/파이써언] - [파이썬] 간단한 계산기 (+, -, *, /)

[플그래밍/파이써언] - [파이썬] 내가 공부하려고 만든 Tkinter 투토리얼

반응형