PyQt개발강좌, 디렉토리 및 파일 필터링

안녕하세요! 이번 포스트에서는 PyQt를 활용하여 디렉토리 및 파일을 필터링하는 방법에 대해 알아보겠습니다. PyQt는 파이썬에서 GUI 애플리케이션을 개발할 수 있게 해주는 라이브러리로, 직관적인 인터페이스와 강력한 기능을 제공합니다. 이번 강좌에서는 PyQt를 사용하여 특정 형식의 파일만 보여주는 간단한 파일 탐색기를 만들어보겠습니다.

1. PyQt란?

PyQt는 Python 바인딩을 제공하는 Qt 어플리케이션 프레임워크입니다. C++로 개발한 Qt는 크로스 플랫폼을 지원하며, PyQt는 이 Qt의 모든 기능을 파이썬의 문법으로 사용할 수 있게 해줍니다. PyQt를 사용하면 다양한 플랫폼에서 작동하는 고급 GUI 애플리케이션을 쉽게 만들 수 있습니다.

2. 프로젝트 설정하기

먼저, PyQt 라이브러리를 설치해야 합니다. PyQt5는 PyQt의 최신 버전이며, 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install PyQt5

이제 파일 탐색기 프로젝트를 위한 기본 구조를 설정하겠습니다. 이번 예제에서는 PyQt의 QFileDialog, QListWidget, QPushButton 등을 사용할 것입니다.

3. 기본 애플리케이션 구조

다음은 PyQt 애플리케이션을 위한 기본 구조입니다.

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

위 코드에서 QApplication은 PyQt 애플리케이션의 시작점이며, QMainWindow는 기본 창을 생성하는 데 사용됩니다.

4. 파일 탐색기 UI 만들기

이제 파일 탐색기 인터페이스의 UI를 만들겠습니다. 사용자에게 파일과 디렉토리를 선택하도록 도와줄 몇 가지 기본 UI 요소를 추가합니다.


class FileExplorer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("파일 탐색기")
        self.setGeometry(100, 100, 600, 400)

        # 리스트 위젯
        self.list_widget = QListWidget(self)

        # 필터 버튼
        self.filter_button = QPushButton("파일 필터링", self)
        self.filter_button.clicked.connect(self.filter_files)

        # 레이아웃 설정
        layout = QVBoxLayout()
        layout.addWidget(self.list_widget)
        layout.addWidget(self.filter_button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

위와 같이 기본적인 파일 탐색기 UI를 설정했습니다. 리스트 위젯은 선택한 파일을 표시하며, 필터 버튼을 클릭하면 특정 유형의 파일을 보여주도록 설정합니다.

5. 디렉토리 열기 및 파일 필터링

이제 파일을 필터링할 수 있는 기능을 구현하겠습니다. 사용자가 선택한 디렉토리를 열고, 특정 파일 형태를 필터링하는 메소드를 작성합니다.


    def filter_files(self):
        # 디렉토리 선택 대화상자 표시
        directory = QFileDialog.getExistingDirectory(self, "디렉토리 선택")
        
        if directory:
            self.list_widget.clear()  # 리스트 초기화
            # 특정 파일 확장자 필터링 (.txt, .py)
            file_filter = ['*.txt', '*.py']
            for filter in file_filter:
                for file in QFileDialog.getOpenFileNames(self, "파일 선택", directory, filter)[0]:
                    self.list_widget.addItem(file)

위의 filter_files 메소드는 사용자가 선택한 디렉토리에서 특정 형식(.txt, .py)의 파일만을 리스트에 추가합니다.

6. 애플리케이션 실행

마지막으로, 애플리케이션을 실행하는 코드를 추가하겠습니다. 이는 PyQt 애플리케이션을 실행하기 위해 항상 필요합니다.


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

이렇게 해서 기본적인 PyQt 파일 탐색기 애플리케이션이 완성되었습니다. 전체 코드는 다음과 같습니다:


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

class FileExplorer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("파일 탐색기")
        self.setGeometry(100, 100, 600, 400)

        self.list_widget = QListWidget(self)
        self.filter_button = QPushButton("파일 필터링", self)
        self.filter_button.clicked.connect(self.filter_files)

        layout = QVBoxLayout()
        layout.addWidget(self.list_widget)
        layout.addWidget(self.filter_button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def filter_files(self):
        directory = QFileDialog.getExistingDirectory(self, "디렉토리 선택")
        if directory:
            self.list_widget.clear()
            file_filter = ['*.txt', '*.py']
            for filter in file_filter:
                for file in QFileDialog.getOpenFileNames(self, "파일 선택", directory, filter)[0]:
                    self.list_widget.addItem(file)

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

7. 마무리

이번 포스트에서는 PyQt를 사용하여 기본적인 파일 탐색기 프로그램을 만드는 방법을 알아보았습니다. 단순한 UI 구성 요소와 이벤트 핸들링을 통해 사용자 친화적인 애플리케이션을 구축하는 데 초점을 맞추었습니다.

이제 여러분은 PyQt를 사용해 디렉토리와 파일을 필터링하는 방법을 익혔습니다. 이것은 GUI 개발에서 시작에 불과하며, 추후 더 복잡한 기능(예: 다중 선택, 파일 미리 보기 등)으로 확장할 수 있습니다.

앞으로도 PyQt에 대한 다양한 주제를 다루는 포스팅을 진행할 예정입니다. 유용한 정보가 되셨기를 바랍니다!