PyQt개발강좌, 특정 키 입력으로 검색창 띄우기, 검색창을 통한 결과 필터링 및 응답 처리

안녕하세요, 여러분! 이번 강좌에서는 PyQt를 활용하여 특정 키 입력으로 검색창을 띄우고, 그 검색창을 통한 결과 필터링 및 응답 처리를 구현하는 방법을 자세히 알아보겠습니다. PyQt는 파이썬에서 Qt 프레임워크를 사용하여 GUI 애플리케이션을 개발할 수 있도록 도와주는 라이브러리입니다. 우리는 PyQt를 사용해 직관적이고 사용하기 쉬운 인터페이스를 구축할 것입니다.

이 강좌의 주요 목표는 다음과 같습니다:

  • 키 입력 이벤트를 감지하여 특정 상황에서 검색창을 표시하는 방법
  • 사용자가 입력한 값을 기반으로 결과를 필터링하는 기능 구현
  • 검색 결과를 사용자에게 보여주는 방법

1. 프로젝트 준비

먼저, PyQt5를 설치해야 합니다. 이를 위해 다음과 같은 명령어를 사용할 수 있습니다.

pip install PyQt5

설치가 완료되면 기본 프로젝트 구조를 설정하겠습니다. 아래 코드를 실행하여 기본 GUI를 만들어봅시다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QListWidget, QVBoxLayout, QWidget, QLabel

2. 기본 GUI 설정

QMainWindow를 상속받아 기본적인 GUI를 설정합니다. 이 예제에서는 검색 입력 필드와 결과 목록을 표시하는 GUI를 생성합니다.

class SearchApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('검색 앱')
        self.setGeometry(100, 100, 400, 300)

        self.search_input = QLineEdit(self)
        self.search_input.setPlaceholderText('검색어를 입력하세요...')
        self.search_input.returnPressed.connect(self.on_return_pressed)

        self.result_list = QListWidget(self)

        layout = QVBoxLayout()
        layout.addWidget(QLabel('검색어 입력:'))
        layout.addWidget(self.search_input)
        layout.addWidget(QLabel('검색 결과:'))
        layout.addWidget(self.result_list)

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

위의 코드에서 QLineEdit 위젯은 사용자가 검색어를 입력할 수 있는 필드를 나타냅니다. 또한 QListWidget는 검색 결과를 표시하는 데 사용됩니다.

3. 검색창 띄우기(특정 키 입력 시)

이제 사용자가 특정 키를 입력했을 때 검색창을 띄우는 기능을 구현해보겠습니다. 예를 들어, 사용자가 ‘S’ 키를 누르면 검색 입력 필드가 활성화됩니다.

    def keyPressEvent(self, event):
        if event.key() == ord('S'):
            self.search_input.setFocus()

이제 위 코드를 SearchApp 클래스에 추가하여 키 입력 이벤트를 처리하도록 하겠습니다.

4. 검색어 입력 및 필터링

이제 사용자가 검색어를 입력한 후 Enter 키를 눌렀을 때 검색 결과를 필터링하여 보여주도록 하겠습니다. 이를 위해 on_return_pressed 메서드를 정의합니다.

    def on_return_pressed(self):
        search_term = self.search_input.text().lower()
        self.result_list.clear()
        
        # 예제로 사용할 데이터
        data = ['Apple', 'Banana', 'Cherry', 'Date', 'Fig', 'Grape', 'Kiwi']
        
        filtered_results = [item for item in data if search_term in item.lower()]
        self.result_list.addItems(filtered_results)

위 코드에서 data 리스트는 검색할 항목을 포함하고 있습니다. 사용자가 입력한 검색어를 기준으로 데이터를 필터링하여 결과 목록에 추가합니다.

5. 메인 함수 및 실행

마지막으로, 우리의 애플리케이션을 실행하는 메인 함수를 추가해야 합니다.

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

6. 전체 코드

위의 모든 내용을 통합하여 전체 코드 예제는 다음과 같습니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QListWidget, QVBoxLayout, QWidget, QLabel

class SearchApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('검색 앱')
        self.setGeometry(100, 100, 400, 300)

        self.search_input = QLineEdit(self)
        self.search_input.setPlaceholderText('검색어를 입력하세요...')
        self.search_input.returnPressed.connect(self.on_return_pressed)

        self.result_list = QListWidget(self)

        layout = QVBoxLayout()
        layout.addWidget(QLabel('검색어 입력:'))
        layout.addWidget(self.search_input)
        layout.addWidget(QLabel('검색 결과:'))
        layout.addWidget(self.result_list)

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

    def keyPressEvent(self, event):
        if event.key() == ord('S'):
            self.search_input.setFocus()

    def on_return_pressed(self):
        search_term = self.search_input.text().lower()
        self.result_list.clear()
        
        # 예제로 사용할 데이터
        data = ['Apple', 'Banana', 'Cherry', 'Date', 'Fig', 'Grape', 'Kiwi']
        
        filtered_results = [item for item in data if search_term in item.lower()]
        self.result_list.addItems(filtered_results)

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

7. 마무리

위의 코드를 통해 특정 키 입력으로 검색창을 띄우고, 입력된 검색어를 기반으로 결과를 필터링하는 방법을 배웠습니다. PyQt를 사용하여 GUI 애플리케이션을 개발하는 데 있어 이 강좌가 도움이 되었기를 바랍니다. 앞으로 더 많은 기능을 추가하여 독창적인 애플리케이션을 만들어보세요!

감사합니다. 여러분의 PyQt 개발 journey를 응원합니다!