728x90
반응형

QFileDialog는 PyQt5에서 파일 또는 디렉터리를 선택하는 대화 상자를 제공하는 클래스입니다. 파일 열기와 저장을 간단히 구현할 수 있어 응용 프로그램 개발에 자주 사용됩니다. 이번 포스팅에서는 QFileDialog의 기본 사용법과 주요 메서드를 설명하고, 간단한 예제 코드를 통해 이를 활용하는 방법을 소개합니다.


예제 코드: 파일 열기와 저장 구현하기

아래 코드는 QFileDialog를 사용해 파일을 열고 저장하는 기능을 구현한 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog


class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 중앙에 텍스트 편집기 추가
        self.textEdit = QTextEdit(self)
        self.setCentralWidget(self.textEdit)

        # 파일 열기 액션
        openFile = QAction('Open', self)
        openFile.setShortcut('Ctrl+O')  # 단축키 설정
        openFile.setStatusTip('Open a file')  # 상태 표시줄 설명
        openFile.triggered.connect(self.showOpenDialog)  # 클릭 시 연결될 메서드 설정

        # 파일 저장 액션
        saveFile = QAction('Save', self)
        saveFile.setShortcut('Ctrl+S')
        saveFile.setStatusTip('Save a file')
        saveFile.triggered.connect(self.showSaveDialog)

        # 메뉴바 생성 및 추가
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')  # 메뉴 이름 지정
        fileMenu.addAction(openFile)  # 메뉴에 'Open' 추가
        fileMenu.addAction(saveFile)  # 메뉴에 'Save' 추가

        # 윈도우 설정
        self.setWindowTitle('QFileDialog Example')  # 창 제목 설정
        self.setGeometry(300, 300, 400, 300)  # 창 위치와 크기 설정
        self.show()

    def showOpenDialog(self):
        """파일 열기 대화 상자"""
        # 파일 열기 대화 상자 호출
        filePath, _ = QFileDialog.getOpenFileName(
            self, 'Open File', '', 'Text Files (*.txt);;All Files (*)'
        )
        if filePath:  # 사용자가 파일을 선택한 경우
            with open(filePath, 'r', encoding='utf-8') as file:
                self.textEdit.setText(file.read())  # 파일 내용을 텍스트 편집기에 로드

    def showSaveDialog(self):
        """파일 저장 대화 상자"""
        # 파일 저장 대화 상자 호출
        filePath, _ = QFileDialog.getSaveFileName(
            self, 'Save File', '', 'Text Files (*.txt);;All Files (*)'
        )
        if filePath:  # 사용자가 저장 위치를 지정한 경우
            with open(filePath, 'w', encoding='utf-8') as file:
                file.write(self.textEdit.toPlainText())  # 텍스트 편집기의 내용을 저장


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

코드 설명

1. 메인 윈도우 및 텍스트 편집기 구성

  • QMainWindow: PyQt5에서 기본적으로 제공하는 윈도우 위젯으로, 메뉴 바와 상태 표시줄 등을 포함할 수 있습니다.
  • QTextEdit: 다중 줄 텍스트 입력 및 출력 위젯. 중앙에 배치하여 사용자가 텍스트를 입력하거나 파일 내용을 표시합니다.

2. 파일 열기와 저장 액션

  • QAction: 메뉴나 툴바에서 선택할 수 있는 작업(액션)을 정의합니다.
    • setShortcut: 단축키를 지정합니다. 예: Ctrl+O는 파일 열기.
    • setStatusTip: 상태 표시줄에 표시할 텍스트를 설정합니다.
    • triggered.connect: 액션이 트리거되었을 때 호출할 메서드를 연결합니다.

3. 파일 열기 대화 상자

  • QFileDialog.getOpenFileName:
    • 사용자가 파일을 선택하면 선택된 파일의 경로를 반환합니다.
    • filter 인수를 사용하여 특정 파일 형식만 표시할 수 있습니다. 예: Text Files (*.txt);;All Files (*).

4. 파일 저장 대화 상자

  • QFileDialog.getSaveFileName:
    • 사용자가 저장 위치와 파일 이름을 선택하면 그 경로를 반환합니다.
    • 파일 확장자는 filter를 통해 설정할 수 있습니다.

5. 파일 입출력 처리

  • with open(filePath, mode, encoding='utf-8'):
    • 파일을 읽거나 쓸 때 사용합니다.
    • mode='r': 읽기 모드.
    • mode='w': 쓰기 모드.
    • encoding='utf-8': UTF-8 인코딩 사용.
728x90

주요 메서드 정리

  1. QFileDialog.getOpenFileName
    • 파일 열기 대화 상자를 호출합니다.
    • 반환값: (선택된 파일 경로, 선택된 필터).
  2. QFileDialog.getSaveFileName
    • 파일 저장 대화 상자를 호출합니다.
    • 반환값: (선택된 파일 경로, 선택된 필터).
  3. QAction.setShortcut
    • 단축키를 지정합니다.
    • 예: Ctrl+O는 파일 열기에 할당.
  4. QTextEdit
    • setText: 텍스트를 설정합니다.
    • toPlainText: 입력된 텍스트를 가져옵니다.

실행 결과

  1. 파일 열기:
    • 메뉴에서 File > Open을 선택하거나 Ctrl+O를 누르면 파일 열기 대화 상자가 표시됩니다.
    • 선택한 파일의 내용을 텍스트 편집기에 로드합니다.
  2. 파일 저장:
    • 메뉴에서 File > Save를 선택하거나 Ctrl+S를 누르면 파일 저장 대화 상자가 표시됩니다.
    • 텍스트 편집기에 입력한 내용을 저장합니다.


결론

이 예제에서는 QFileDialog를 사용해 파일을 열고 저장하는 기본적인 기능을 구현했습니다. QFileDialog는 다양한 옵션을 제공해 더 복잡한 파일 선택 기능도 구현할 수 있습니다. 이 예제를 응용해 텍스트 파일 외에도 다양한 형식의 파일을 처리해 보세요!

728x90
반응형

+ Recent posts