728x90
반응형

 티스토리 

 

파일 브라우저, 파일 탐색기를 만들어 보자. 

Tkinter GUI 라이브러리가 있지만, 저는 PysimpleGUI이 좀더 동작이 가볍고 구현이 쉬워 자주 활용 하고있습니다.

PySimpleGUI:
PySimpleGUI는 Tkinter, Qt, WxPython, Remi를 래핑한 라이브러리입니다.
이름에서 알 수 있듯이, PySimpleGUI는 사용하기 쉬우며, 빠르게 GUI를 구축할 수 있도록 설계되었습니다.
코드가 더 짧고, 이해하기 쉬운 편이며, 빠르게 프로토타입을 만들기에 적합합니다.
다양한 테마와 위젯을 지원하여 멋진 인터페이스를 쉽게 만들 수 있습니다.
PySimpleGUI를 선택하는 것은 사용의 용이성과 빠른 개발이 필요할 때 좋은 선택일 수 있습니다. 복잡한 요구 사항이 없고, 간단하면서도 효율적인 GUI를 원한다면 PySimpleGUI가 매우 적합할 것입니다. 반면, 더 복잡하고 맞춤화된 GUI가 필요하다면 Tkinter를 고려해볼 수 있습니다.

Tkinter:
Tkinter는 파이썬의 표준 GUI 툴킷입니다.
광범위하게 사용되며, 파이썬 설치와 함께 기본적으로 제공됩니다.
Tkinter는 매우 유연하며, 맞춤화가 가능하지만, 복잡한 인터페이스를 만들 때는 코드가 길어질 수 있습니다.
플랫폼 독립적이며, 윈도우, 맥OS, 리눅스에서 잘 작동합니다.

1. 코드리뷰

이 PySimpleGUI 스크립트는 사용자가 파일을 선택할 수 있는 간단한 파일 브라우저 GUI를 구현하고 있습니다.

import PySimpleGUI as sg
import os

current_path = os.getcwd()  # Get the current working directory

layout = [
    [sg.Text("Choose a file: ")],
    [sg.InputText(key="-FILE-"), sg.FileBrowse(initial_folder=current_path, file_types=[("ALL Files", "*.*")])],
    [sg.Button("OK"), sg.Exit()]
]

window = sg.Window("File Browser", layout)

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, "Exit"):
        break
    elif event == "OK":
        file_path = values["-FILE-"]
        if file_path:
            print(f"Loaded File: {file_path}")
        else:
            print("No file selected.")

window.close()

위의 sg.Exit() 버튼은 sg.Button('EXIT')로 변경해서 사용하셔도 됩니다.

실행결과

코드 분석
모듈 임포트: PySimpleGUI와 os 모듈을 사용합니다. PySimpleGUI는 GUI를 만드는데 사용되고, os는 현재 작업 디렉토리 경로를 얻는데 사용됩니다.
현재 디렉토리 경로: os.getcwd()를 사용하여 현재 실행중인 디렉토리 위치를 가져옵니다.
GUI 레이아웃 설정: 파일을 선택할 수 있는 인터페이스와 'OK' 및 'Exit' 버튼이 포함된 GUI 레이아웃을 정의합니다.
이벤트 루프: 사용자의 입력을 기다리고, 'OK' 버튼을 누르면 파일 경로를 출력하고, 'Exit' 버튼이나 창 닫기를 통해 프로그램을 종료합니다.

이벤트 처리 개선: if event in (sg.WIN_CLOSED, "Exit") 부분은 명확하지만, elif event == "OK"는 else로 대체할 수 있습니다. 현재 구조에서는 'OK' 외의 다른 이벤트는 발생하지 않기 때문입니다.

리소스 관리: GUI 프로그램에서는 리소스 관리도 중요합니다. PySimpleGUI는 내부적으로 리소스 관리를 잘 하지만, 크고 복잡한 응용 프로그램에서는 리소스 관리를 더 신경 써야 할 수 있습니다.

오류 처리: 사용자가 파일을 선택하지 않고 'OK'를 누를 경우를 대비해 오류 처리를 추가하는 것이 좋습니다.

다른 예제 코드: 

import PySimpleGUI as sg
import os

def create_file_browser():
    # 현재 작업 디렉토리를 가져옵니다.
    current_path = os.getcwd()

    # 레이아웃을 정의합니다.
    layout = [
        [sg.Text("Choose a file: ")],
        [sg.InputText(key="-FILE-"), sg.FileBrowse(initial_folder=current_path, file_types=[("ALL Files", "*.*")])],
        [sg.Button("Open"), sg.Button("Cancel")]
    ]

    # 윈도우 객체를 생성합니다.
    window = sg.Window("File Browser", layout)

    # 이벤트 루프
    while True:
        event, values = window.read()
        if event in (None, "Cancel"):
            break
        if event == "Open":
            file_path = values["-FILE-"]
            if file_path:
                sg.popup(f"You selected: {file_path}")
            else:
                sg.popup("No file selected.")
    
    window.close()

# 파일 브라우저 실행
create_file_browser()

- os.getcwd() 는 현재 작업 디렉토리를 가져오는 데 사용됩니다.

- 레이아웃 생성: GUI의 레이아웃을 정의합니다. 여기에는 파일 선택을 위한 InputText와 FileBrowse 버튼, 그리고 'Open'과 'Cancel' 버튼이 포함됩니다.

- 이벤트 루프: 사용자의 입력을 처리하는 이벤트 루프입니다. 사용자가 파일을 선택하고 'Open'을 클릭하면 선택된 파일 경로를 팝업으로 표시합니다. 'Cancel'을 클릭하거나 창을 닫으면 프로그램이 종료됩니다.

2. 여러파일 또는 폴더 선택

sg.FileBrowse()에서 sg.FilesBrowse()로 변경한다.
values['-FILE-']를 values['-FILE-'].split(';')로 세미콜론 단위로 파일 정보를 가져온다.

import PySimpleGUI as sg

# Create the layout for the file browser
layout = [[sg.Text('Select multiple files:')],
          [sg.Input(key='-FILES-'), sg.FilesBrowse()],
          [sg.Button('Submit'), sg.Button('Cancel')]]

# Create the window
window = sg.Window('File Browser', layout)

# Event loop
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == 'Cancel':
        break
    elif event == 'Submit':
        selected_files = values['-FILES-'].split(';')
        print('Selected Files:', selected_files)

# Close the window
window.close()

실행결과

 

2. 폴더(디렉토리) 의 정보를 가져오기.

폴더 정보를 가져는 연습을 해보자.

이번에는 한글을 적용해서 만든 코드 예제 입니다.

import PySimpleGUI as sg

# 파일 브라우저를 위한 레이아웃 생성
layout = [[sg.Text('폴더를 선택하세요:')],
          [sg.Input(key='-FOLDER-'), sg.FolderBrowse()],
          [sg.Button('확인'), sg.Button('취소')]]

# 창 생성
window = sg.Window('파일 브라우저', layout)

# 이벤트 루프
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == '취소':
        break
    elif event == '확인':
        selected_folder = values['-FOLDER-']
        print('선택된 폴더:', selected_folder)

# 창 닫기
window.close()

실행결과

 

 

마무리

- 이번 포스팅은 PySimpleGUI의 파일 브라우저를 사용하여 Python GUI 애플리케이션에서 파일과 폴더를 선택할 수 있는 기본적인 사용법을 알아 보았습니다.

 

궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.

 

728x90
반응형

+ Recent posts