Profile picture

[PySide6] QFileDialog로 폴더 또는 파일 선택하는 창 띄워보기

JaehyoJJAng2024년 09월 12일

개요

PySide6를 활용하여 "폴더 선택" 및 "파일 선택" 기능을 구현하는 방법에 대해 기록해보려고 한다.


QFileDialog 주요 메소드 및 예제

폴더 선택 (QFileDialog.getExistingDirectory)

PySide6에서 폴더 및 파일 선택 기능을 구현하려면 QFileDialog 클래스를 사용한다.

폴더 선택의 경우 QFileDialog.getExistingDirectory 메소드를 사용하면 폴더를 선택할 수 있는 대화상자를 제공한다.


예제 코드

아래는 PySide6를 사용하여 폴더 선택 기능을 구현한 간단한 예제이다.

from PySide6.QtWidgets import QApplication, QFileDialog, QVBoxLayout, QPushButton, QWidget, QLabel


class FolderSelector(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("폴더 선택 예제")
        self.setGeometry(100, 100, 400, 200)

        # 레이아웃 설정
        layout = QVBoxLayout()

        # 라벨 생성
        self.label = QLabel("선택한 폴더 경로가 여기에 표시됩니다.")
        layout.addWidget(self.label)

        # 버튼 생성
        self.button = QPushButton("폴더 선택")
        self.button.clicked.connect(self.select_folder)
        layout.addWidget(self.button)

        # 메인 레이아웃 설정
        self.setLayout(layout)

    def select_folder(self):
        # 폴더 선택 대화상자 열기
        folder_path = QFileDialog.getExistingDirectory(self, "폴더 선택", "")
        if folder_path:
            self.label.setText(f"선택한 폴더: {folder_path}")
        else:
            self.label.setText("폴더를 선택하지 않았습니다.")


if __name__ == "__main__":
    app = QApplication([])

    window = FolderSelector()
    window.show()

    app.exec()

파일 선택 (QFileDialog.getOpenFileName)

파일 선택의 경우 QFileDialog.getOpenFileName 메소드를 사용하면 파일을 선택할 수 있는 대화상자를 제공한다.


예제 코드

PySide6에서 버튼 클릭 시 파일 선택 창을 띄우고,

사용자가 파일을 선택하면 전체 경로(파일 경로 + 파일 이름)를 출력하거나 표시하고 싶다면,

아래와 같이 QFileDialog.getOpenFileName()을 사용하면 된다.

from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog, QLabel
)
import sys

class FileSelector(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("파일 선택 예제")
        self.resize(400, 200)

        # UI 구성 요소
        self.layout = QVBoxLayout(self)

        self.button = QPushButton("파일 선택")
        self.label = QLabel("선택된 파일 경로가 여기에 표시됩니다.")

        # 버튼 클릭 시 파일 선택 함수 연결
        self.button.clicked.connect(self.select_file)

        # 레이아웃에 추가
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.label)

    def select_file(self):
        file_path, _ = QFileDialog.getOpenFileName(self, "파일 선택", "", "모든 파일 (*.*)")
        if file_path:
            self.label.setText(f"선택한 파일: {file_path}")
            print("선택한 파일 경로:", file_path)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = FileSelector()
    window.show()
    sys.exit(app.exec())

또한, QFileDialog.getOpenFileName()의 세 번째 인자인 파일 필터 를 설정해주면,

원하는 확장자만 선택할 수 있게 필터링이 가능하다!


예를 들어 다음과 같이 다양한 확장자 필터를 사용해볼 수 있다.

file_path, _ = QFileDialog.getOpenFileName(
    self,
    "파일 선택",
    "",
    "이미지 파일 (*.png *.jpg *.jpeg);;텍스트 파일 (*.txt);;모든 파일 (*.*)"
)
  • "이미지 파일 (*.png *.jpg *.jpeg);;텍스트 파일 (*.txt);;모든 파일 (*.*)"
    • ;;으로 여러 필터를 구분합니다.
  • 다이얼로그에서 드롭다운 메뉴로 필터를 선택할 수 있게 됩니다.

Loading script...