대화상자(Dialog Box)는 다양한 애플리케이션에서 누구나 한 번쯤 접해 본 UI 요소입니다. 사용자와의 상호작용이 핵심인 프로그램을 개발할 때 특히 유용하며, 예를 들어 사용자에게 파일을 선택하도록 요청한 뒤 해당 파일을 읽거나 쓰는 등의 작업을 이어서 수행할 수 있습니다. 파이썬에서는 tkinter.filedialog 모듈을 활용하면 이러한 대화상자를 아주 간단하게 구현할 수 있습니다.
예제 코드
아래 예제에서는 사용자가 로컬 디렉터리에서 파일을 선택하면, 선택된 파일의 전체 경로를 Label 위젯에 표시하는 간단한 데스크톱 애플리케이션을 만들어 보겠습니다.
#Tkinter 라이브러리 임포트
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
#Tkinter 프레임 인스턴스 생성
win = Tk()
#창 크기 설정
win.geometry("750x250")
def select_file():
#파일 선택 대화상자 열기
path = filedialog.askopenfilename(
title="Select a File",
filetype=(("text files", "*.txt"), ("all files", "*.*"))
)
#선택한 파일의 경로를 Label에 표시
Label(win, text=path, font=13).pack()
#안내 문구와 대화상자를 여는 버튼 생성
Label(win, text="Click the Button to Select a File", font=("Aerial 18 bold")).pack(pady=20)
button = ttk.Button(win, text="Select", command=select_file)
button.pack(ipadx=5, pady=15)
win.mainloop()
코드 설명
askopenfilename() 함수는 OS 기본 파일 탐색기를 열어 사용자가 파일을 선택할 수 있게 해주며, 선택된 파일의 전체 경로를 문자열로 반환합니다. title 옵션으로 대화상자 제목을 지정할 수 있고, filetype 옵션으로 텍스트 파일(.txt) 등 허용할 파일 형식을 필터링할 수 있습니다.
실행 결과
위 코드를 실행하면 파일을 선택할 수 있는 버튼이 포함된 창이 화면에 나타납니다.

버튼을 클릭한 뒤 로컬 디렉터리에서 원하는 파일을 선택하면, 해당 파일의 위치(전체 경로)가 Label 위젯에 표시됩니다.

참고: 파일이 아닌 폴더(디렉터리) 자체를 선택하려면?
특정 파일이 아니라 폴더 자체를 선택하고 싶다면 filedialog.askdirectory() 함수를 사용하면 됩니다. 반환되는 값은 선택한 디렉터리의 경로이며, 위 예제의 select_file() 함수 내부를 다음과 같이 바꾸기만 하면 동일한 방식으로 폴더 경로를 표시할 수 있습니다.
def select_folder():
folder_path = filedialog.askdirectory(title="폴더 선택")
Label(win, text=folder_path, font=13).pack()
이처럼 filedialog 모듈을 활용하면 몇 줄의 코드만으로 파일·디렉터리 선택 기능과 경로 저장 로직을 손쉽게 구현할 수 있어, 설정 파일 지정, 이미지 업로드, 작업 폴더 지정 등 다양한 데스크톱 애플리케이션에 응용할 수 있습니다.