안녕하세요! 이번 포스트에서는 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에 대한 다양한 주제를 다루는 포스팅을 진행할 예정입니다. 유용한 정보가 되셨기를 바랍니다!