본문 바로가기
프로그래밍/python

PyQt5 QFileDialog 상세한 사용법

by 마루의 일상 2024. 6. 9.
728x90
반응형

PyQt5는 Python에서 GUI 애플리케이션을 개발할 수 있도록 돕는 라이브러리입니다. QFileDialog는 파일을 열거나 저장할 수 있는 대화 상자를 제공하여, 사용자가 파일 시스템에서 파일을 선택할 수 있도록 해줍니다. 이번 포스팅에서는 PyQt5의 QFileDialog를 사용하는 방법을 단계별로 설명하겠습니다.

1. QFileDialog 기본 사용법

QFileDialog를 사용하여 파일을 선택하는 간단한 예제를 만들어 보겠습니다.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog, QLabel

class FileDialogExample(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.label = QLabel("파일을 선택해 주세요", self)
        layout.addWidget(self.label)

        self.button = QPushButton("파일 열기", self)
        self.button.clicked.connect(self.showFileDialog)
        layout.addWidget(self.button)

        self.setLayout(layout)
        self.setWindowTitle('QFileDialog 예제')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def showFileDialog(self):
        options = QFileDialog.Options()
        fileName, _ = QFileDialog.getOpenFileName(self, "파일 열기", "", "모든 파일 (*);;텍스트 파일 (*.txt)", options=options)
        if fileName:
            self.label.setText(fileName)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FileDialogExample()
    sys.exit(app.exec_())

 

위 코드에서는 QFileDialog.getOpenFileName()을 사용하여 파일 열기 대화 상자를 띄우고, 사용자가 선택한 파일의 경로를 QLabel에 표시합니다.

2. 파일 저장 대화 상자 사용법

QFileDialog는 파일을 열 뿐만 아니라 저장할 수도 있습니다. 다음은 파일 저장 대화 상자를 사용하는 예제입니다.

def showSaveFileDialog(self):
    options = QFileDialog.Options()
    fileName, _ = QFileDialog.getSaveFileName(self, "파일 저장", "", "모든 파일 (*);;텍스트 파일 (*.txt)", options=options)
    if fileName:
        self.label.setText(fileName)

 

이 코드는 파일을 저장할 위치와 이름을 사용자에게 묻고, 선택된 파일 경로를 QLabel에 표시합니다.

3. 디렉토리 선택 대화 상자 사용법

파일 대신 디렉토리를 선택하도록 할 수도 있습니다. 다음은 디렉토리 선택 대화 상자를 사용하는 예제입니다.

def showDirectoryDialog(self):
    options = QFileDialog.Options()
    directory = QFileDialog.getExistingDirectory(self, "디렉토리 선택", "", options=options)
    if directory:
        self.label.setText(directory)

 

이 코드는 사용자가 디렉토리를 선택하도록 하고, 선택된 디렉토리 경로를 QLabel에 표시합니다.

4. QFileDialog 커스터마이징

QFileDialog는 다양한 옵션을 제공하여 대화 상자를 커스터마이징할 수 있습니다. 예를 들어, 다중 파일 선택을 허용하거나, 특정 파일 형식을 필터링할 수 있습니다.

def showCustomFileDialog(self):
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog  # 예: 네이티브 대화 상자를 사용하지 않기
    options |= QFileDialog.ReadOnly  # 예: 읽기 전용 모드
    files, _ = QFileDialog.getOpenFileNames(self, "파일 선택", "", "이미지 파일 (*.png *.jpg);;모든 파일 (*)", options=options)
    if files:
        self.label.setText("\n".join(files))

 

위 예제에서는 QFileDialog.getOpenFileNames()을 사용하여 다중 파일 선택을 허용하고, 파일 형식을 필터링합니다. DontUseNativeDialog 옵션은 네이티브 대화 상자를 사용하지 않고 Qt의 대화 상자를 사용하게 합니다.

5. QFileDialog 신호 처리

QFileDialog는 다양한 신호를 발생시킵니다. 이를 활용하여 사용자가 파일을 선택할 때마다 특정 작업을 수행할 수 있습니다.

class FileDialogWithSignals(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.label = QLabel("파일 선택 미리보기", self)
        layout.addWidget(self.label)

        self.button = QPushButton("파일 선택", self)
        self.button.clicked.connect(self.showFileDialog)
        layout.addWidget(self.button)

        self.setLayout(layout)
        self.setWindowTitle('QFileDialog 신호 처리 예제')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def showFileDialog(self):
        fileDialog = QFileDialog(self)
        fileDialog.fileSelected.connect(self.onFileSelected)
        fileDialog.exec_()

    def onFileSelected(self, file):
        self.label.setText(file)

 

위 예제에서는 fileSelected 신호를 처리하여 사용자가 파일을 선택할 때마다 QLabel에 선택된 파일의 경로를 업데이트합니다.

이번 포스팅에서는 PyQt5의 QFileDialog를 사용하는 방법에 대해 알아보았습니다. 기본 사용법부터 파일 저장, 디렉토리 선택, 커스터마이징 및 신호 처리를 활용한 고급 사용법까지 다루어 보았습니다. QFileDialog를 활용하면 사용자가 애플리케이션에서 파일을 손쉽게 열거나 저장할 수 있도록 할 수 있습니다. 이를 통해 보다 직관적이고 사용자 친화적인 인터페이스를 제공할 수 있습니다.

QFileDialog를 통해 파일 선택 기능을 구현해 보세요! 여러분의 애플리케이션에 멋진 기능을 추가할 수 있을 것입니다.

728x90
반응형