티스토리
파일 브라우저, 파일 탐색기를 만들어 보자.
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 애플리케이션에서 파일과 폴더를 선택할 수 있는 기본적인 사용법을 알아 보았습니다.
궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.
'PYTHON 파이썬 > PysimpleGUI' 카테고리의 다른 글
PysimpleGUI 윈도우 종료후 콘솔 출력,리다이렉션 설정 (0) | 2024.04.19 |
---|---|
[PysimpleGui] popups tutorials 팝업창 예제 모음 (0) | 2024.03.07 |
[python/PySimpleGUI] 주요 기능 10가지 예제 (0) | 2024.01.11 |
[PysimpleGUI/Folder Browser] 여러 폴더를 찾고 출력하기 (0) | 2023.12.25 |
[Python/Pandas]파이썬 판다스 datetime 특정 날짜 구간 조건별 추출#2 (0) | 2023.12.23 |