PyQt개발강좌, MacOS Spotlight 같은 기능 구현, 텍스트와 링크 등을 포함한 정보 레이어 추가

작성자: 조광형

작성일: 2024년 11월 26일

1. 서론

PyQt는 Python 프로그래머들이 Qt 프레임워크를 활용하여 강력하고 직관적인 GUI(Graphical User Interface) 애플리케이션을 만들 수 있도록 지원하는 라이브러리입니다. 본 강좌에서는 MacOS의 Spotlight와 유사한 기능을 구현해볼 것입니다. Spotlight는 사용자가 필요로 하는 정보를 빠르게 찾을 수 있도록 돕는 강력한 도구입니다. 우리는 이와 유사한 검색 기능을 구현하고, 검색 결과를 더 매력적으로 표현하기 위해 정보 레이어를 추가할 것입니다. 이 강좌는 PyQt에 대한 기초 지식이 있는 독자를 대상으로 하고 있으며, 전체 프로젝트를 완성하기 위해 필요한 모든 코드와 설명을 포함하고 있습니다.

2. PyQt 설치하기

PyQt를 설치하려면, 먼저 Python이 설치되어 있어야 합니다. Python이 설치되었다면, pip을 사용하여 PyQt를 설치할 수 있습니다. 아래 명령어를 터미널에 입력하세요:

pip install PyQt5

설치가 완료되면 아래 코드를 통해 PyQt가 정상적으로 설치되었는지 확인해보세요:

python -c "import PyQt5; print(PyQt5.__version__)"

3. 기본적인 PyQt 애플리케이션 만들기

우선 간단한 PyQt 애플리케이션의 기본 구조를 만들어 보겠습니다. 아래 코드를 사용하여 기본 애플리케이션을 생성해보세요:


from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
import sys

class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Hello PyQt")
        self.setGeometry(100, 100, 600, 400)
        label = QLabel("안녕하세요, PyQt!", self)
        label.move(200, 200)

app = QApplication(sys.argv)
main_window = App()
main_window.show()
sys.exit(app.exec_())
            

위 코드는 기본적인 PyQt 애플리케이션을 만들어 “안녕하세요, PyQt!”라는 텍스트가 표시되는 창을 생성합니다.

4. Spotlight 검색 기능 구현하기

이제 Spotlight와 유사한 검색 기능을 구현해보겠습니다. 사용자가 텍스트를 입력하면 관련된 결과를 표시하도록 하겠습니다.


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

class SpotlightApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Spotlight Similar")
        self.setGeometry(100, 100, 400, 300)

        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)
        self.layout = QVBoxLayout(self.central_widget)

        self.search_box = QLineEdit(self)
        self.search_box.setPlaceholderText("검색어를 입력하세요...")
        self.search_box.textChanged.connect(self.filter_results)

        self.results_list = QListWidget(self)

        self.layout.addWidget(self.search_box)
        self.layout.addWidget(self.results_list)
        self.populate_results()

    def populate_results(self):
        self.all_results = ["Python", "Java", "JavaScript", "C++", "Go", "Ruby", "PHP"]
        self.filter_results()

    def filter_results(self):
        query = self.search_box.text().lower()
        self.results_list.clear()
        for result in self.all_results:
            if query in result.lower():
                self.results_list.addItem(result)

app = QApplication(sys.argv)
main_window = SpotlightApp()
main_window.show()
sys.exit(app.exec_())
            

위 코드는 사용자가 입력창에 입력하는 대로 결과 리스트를 필터링하여 보여주는 간단한 검색 기능을 구현합니다. 사용자가 “Py”를 입력하면 “Python”이 결과로 나타나는 식입니다.

5. 정보 레이어 추가하기

이제 검색 결과에 대한 추가 정보를 보여주는 정보 레이어를 추가하겠습니다. 사용자가 검색 결과 항목을 클릭할 때마다 관련 링크와 설명을 표시하는 방법을 알아보겠습니다.


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

class SpotlightApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Spotlight Similar with Info")
        self.setGeometry(100, 100, 600, 400)

        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)
        self.layout = QVBoxLayout(self.central_widget)

        self.search_box = QLineEdit(self)
        self.search_box.setPlaceholderText("검색어를 입력하세요...")
        self.search_box.textChanged.connect(self.filter_results)

        self.results_list = QListWidget(self)
        self.results_list.itemClicked.connect(self.display_info)

        self.info_label = QLabel(self)

        self.layout.addWidget(self.search_box)
        self.layout.addWidget(self.results_list)
        self.layout.addWidget(self.info_label)

        self.populate_results()

    def populate_results(self):
        self.all_results = {
            "Python": "Python은 고급 프로그래밍 언어입니다. (https://www.python.org)",
            "Java": "Java는 객체 지향 프로그래밍 언어입니다. (https://www.java.com)",
            "JavaScript": "JavaScript는 웹 개발에 사용되는 스크립트 언어입니다. (https://www.javascript.com)",
            "C++": "C++은 고성능 언어로, 시스템 프로그래밍에 주로 사용됩니다. (https://en.cppreference.com)",
            "Go": "Go는 Google에서 개발한 프로그래밍 언어입니다. (https://golang.org)",
            "Ruby": "Ruby는 코드의 가독성을 높여주는 객체 지향 언어입니다. (https://www.ruby-lang.org)",
            "PHP": "PHP는 서버 측 스크립팅 언어입니다. (https://www.php.net)"
        }
        self.filter_results()

    def filter_results(self):
        query = self.search_box.text().lower()
        self.results_list.clear()
        for result in self.all_results.keys():
            if query in result.lower():
                self.results_list.addItem(result)

    def display_info(self, item):
        key = item.text()
        info = self.all_results[key]
        self.info_label.setText(info)

app = QApplication(sys.argv)
main_window = SpotlightApp()
main_window.show()
sys.exit(app.exec_())
            

위 코드에서는 검색 결과 항목을 클릭할 때마다 해당 항목에 대한 정보를 표시하도록 정보 레이어를 추가했습니다. 선택된 항목의 정보가 아래 레이블에 표시됩니다.

6. 마무리

본 강좌에서는 MacOS의 Spotlight와 유사한 기능을 구현하는 방법을 배웠습니다. PyQt를 사용하여 기본적인 검색 인터페이스를 만들고, 정보 레이어를 추가하여 사용자 인터페이스를 더 매력적으로 만드는 방법을 알아보았습니다. 이와 같은 기능은 다양한 애플리케이션에서 유용하게 사용될 수 있으며, 본 강좌를 통해 배운 개념을 바탕으로 자신의 프로젝트에 응용해 볼 수 있을 것입니다.

추가적으로 PyQt는 다양한 위젯 및 레이아웃 시스템을 지원하므로, 여러분이 원하는 인터페이스를 자유롭게 커스터마이징 할 수 있습니다.