윈도우 프로그램 기본 위젯

강의노트 Filedialog

강의노트 • 조회수 570 • 댓글 0 • 작성 1년 전 • 수정 3주 전  
  • 윈도우 프로그램

filedialog

tkinter.filedialog는 파일을 열거나 저장하는 창(다이얼로그) 을 띄워주는 모듈이다.

우리가 프로그램에서 파일을 선택할 수 있도록 도와준다.

예: 메모장 → "파일 → 열기" 메뉴 클릭 시 나타나는 창과 비슷하다

기본 사용법

filedialog를 사용하기 위해서는 먼저 모듈을 불러온다.

from tkinter import filedialog

파이썬은 파일들을 다루는 것에 대한 다양한 다이알로그를 제공한다.

filedialog.asksaveasfilename()  # 저장할 파일 이름을 지정받음
filedialog.asksaveasfile()  
filedialog.askopenfilename()  # 파일을 선택해서 경로(문자열)만 가져옴
filedialog.askopenfile()
filedialog.askdirectory()  # 폴더 선택 창을 띄움
filedialog.askopenfilenames() # 파일을 선택해서 경로(문자열)만 가져옴
filedialog.askopenfiles()

간단한 예제

파일 열기

import tkinter as tk
from tkinter import filedialog

def open_file():
    file_path = filedialog.askopenfilename(
        title="파일 선택하기",
        filetypes=(("텍스트 파일", "*.txt"), ("모든 파일", "*.*"))
    )
    if file_path:
        label.config(text=f"선택된 파일: {file_path}")

root = tk.Tk()
root.title("파일 열기 예제")

label = tk.Label(root, text="아직 파일이 선택되지 않았습니다.")
label.pack(pady=10)

button = tk.Button(root, text="파일 열기", command=open_file)
button.pack(pady=10)

root.mainloop()

파일 저장

import tkinter as tk
from tkinter import filedialog

def save_file():
    file_path = filedialog.asksaveasfilename(
        title="저장할 파일 선택하기",
        defaultextension=".txt",
        filetypes=(("텍스트 파일", "*.txt"), ("모든 파일", "*.*"))
    )
    if file_path:
        with open(file_path, "w") as f:
            f.write("여기에 저장된 내용이 들어갑니다.")
        label.config(text=f"저장된 파일: {file_path}")

root = tk.Tk()
root.title("파일 저장 예제")

label = tk.Label(root, text="아직 저장되지 않았습니다.")
label.pack(pady=10)

button = tk.Button(root, text="파일 저장", command=save_file)
button.pack(pady=10)

root.mainloop()

폴더 선택

import tkinter as tk
from tkinter import filedialog

def select_folder():
    folder = filedialog.askdirectory(title="폴더 선택하기")
    if folder:
        label.config(text=f"선택된 폴더: {folder}")

root = tk.Tk()
root.title("폴더 선택 예제")

label = tk.Label(root, text="아직 폴더가 선택되지 않았습니다.")
label.pack(pady=10)

button = tk.Button(root, text="폴더 선택", command=select_folder)
button.pack(pady=10)

root.mainloop()

연습문제

  1. 버튼을 눌러 파일을 선택하면, 선택한 파일의 경로를 라벨에 출력하기.
  2. 여러 개의 파일을 선택하면, 선택한 파일 경로들을 라벨에 모두 출력하기.
  3. 텍스트 입력창에 적은 내용을 asksaveasfilename()을 사용해 저장하기.
  4. 폴더를 선택하면, 그 폴더 안에 있는 파일 목록을 출력하기.

정답 : 1번

import tkinter as tk
from tkinter import filedialog

def select_file():
    file_path = filedialog.askopenfilename()
    if file_path:
        label.config(text=file_path)

root = tk.Tk()
root.title("과제 1")

label = tk.Label(root, text="파일을 선택하세요.")
label.pack(pady=10)

button = tk.Button(root, text="파일 선택", command=select_file)
button.pack(pady=10)

root.mainloop()

2번

import tkinter as tk
from tkinter import filedialog

def select_files():
    file_paths = filedialog.askopenfilenames()
    if file_paths:
        label.config(text="\n".join(file_paths))

root = tk.Tk()
root.title("과제 2")

label = tk.Label(root, text="여러 파일을 선택하세요.")
label.pack(pady=10)

button = tk.Button(root, text="파일 선택", command=select_files)
button.pack(pady=10)

root.mainloop()

3번

import tkinter as tk
from tkinter import filedialog

def save_text():
    file_path = filedialog.asksaveasfilename(
        defaultextension=".txt",
        filetypes=(("텍스트 파일", "*.txt"), ("모든 파일", "*.*"))
    )
    if file_path:
        with open(file_path, "w") as f:
            f.write(textbox.get("1.0", tk.END))
        label.config(text=f"저장 완료: {file_path}")

root = tk.Tk()
root.title("과제 3")

textbox = tk.Text(root, height=5, width=40)
textbox.pack(pady=10)

button = tk.Button(root, text="저장하기", command=save_text)
button.pack(pady=5)

label = tk.Label(root, text="저장할 내용을 입력 후 버튼을 누르세요.")
label.pack(pady=5)

root.mainloop()

4번

import tkinter as tk
from tkinter import filedialog
import os

def show_files():
    folder = filedialog.askdirectory()
    if folder:
        files = os.listdir(folder)
        label.config(text="\n".join(files))

root = tk.Tk()
root.title("과제 4")

button = tk.Button(root, text="폴더 선택", command=show_files)
button.pack(pady=10)

label = tk.Label(root, text="폴더를 선택하세요.")
label.pack(pady=10)

root.mainloop()
이전 글
다음 글
댓글
댓글로 소통하세요.