PyQt개발강좌, 특정 키 입력으로 검색창 띄우기, QShortcut을 이용해 특정 키에 기능 할당하기

안녕하세요! 이번 강좌에서는 PyQt를 활용하여 특정 키 입력으로 검색창을 띄우는 방법에 대해 알아보겠습니다. PyQt는 Python을 위한 Qt 라이브러리로, GUI 애플리케이션 개발을 쉽게 할 수 있게 해줍니다. 이 강좌에서는 QShortcut을 이용하여 특정 키에 기능을 할당하는 방법을 중점적으로 다루어 보겠습니다.

목표

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

  1. PyQt 배경 및 QShortcut 소개
  2. 검색창 UI 설계
  3. 특정 키 입력으로 검색창 열기
  4. 최종 프로젝트 코드 작성

1. PyQt 배경 및 QShortcut 소개

PyQt는 인기 있는 GUI 툴킷인 Qt의 Python 바인딩으로, 강력하고 유연한 GUI 애플리케이션을 만들 수 있는 환경을 제공합니다. PyQt에는 다양한 위젯과 기능이 포함되어 있어, 직관적인 사용자 인터페이스를 생성할 수 있습니다.

QShortcut은 특정 키를 눌렀을 때 특정 기능을 실행할 수 있게 해주는 클래스입니다. 예를 들어, 키보드 단축키를 설정하여 사용자가 더 빠르게 애플리케이션을 사용할 수 있도록 도와줍니다. QShortcut을 사용하면 쉽게 키 입력을 감지하고, 해당 키에 맞는 이벤트를 처리할 수 있습니다.

2. 검색창 UI 설계

우선 검색창을 포함한 기본 윈도우 UI를 설계해 보겠습니다. PyQt를 사용해 기본 윈도우를 설정하고, 검색 입력을 위한 QLineEdit 위젯과 버튼을 추가하겠습니다.


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

class SearchWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("검색창 예제")
        self.setGeometry(100, 100, 400, 200)

        # 부모 위젯
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        # 레이아웃 설정
        self.layout = QVBoxLayout(self.central_widget)

        # 검색 필드 추가
        self.search_input = QLineEdit(self)
        self.search_input.setPlaceholderText("검색어 입력")
        self.layout.addWidget(self.search_input)

        # 검색 버튼 추가
        self.search_button = QPushButton("검색", self)
        self.layout.addWidget(self.search_button)

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

위의 코드를 실행하면 간단한 검색창 UI가 나타납니다. 사용자에게 검색어를 입력 받을 수 있는 QLineEdit과 검색 버튼이 포함되어 있습니다.

3. 특정 키 입력으로 검색창 열기

이제 QShortcut을 사용해 특정 키 입력으로 검색창을 열 수 있도록 구현해 보겠습니다. 예를 들어, 사용자가 ‘Ctrl + F’ 키를 누르면 검색창이 활성화되도록 해보겠습니다.


from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QShortcut

class SearchWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("검색창 예제")
        self.setGeometry(100, 100, 400, 200)

        # 부모 위젯
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        # 레이아웃 설정
        self.layout = QVBoxLayout(self.central_widget)

        # 검색 필드 추가
        self.search_input = QLineEdit(self)
        self.search_input.setPlaceholderText("검색어 입력")
        self.layout.addWidget(self.search_input)

        # 검색 버튼 추가
        self.search_button = QPushButton("검색", self)
        self.layout.addWidget(self.search_button)

        # QShortcut 설정
        self.shortcut = QShortcut(QKeySequence("Ctrl+F"), self)
        self.shortcut.activated.connect(self.show_search)

    def show_search(self):
        self.search_input.clear()  # 이전 입력값 삭제
        self.search_input.setFocus()  # 검색창에 포커스 맞추기
        QMessageBox.information(self, "검색창 열기", "'Ctrl + F' 단축키를 눌렀습니다.")

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

위의 코드에서 추가된 부분을 살펴보겠습니다:

  • QShortcut 인스턴스를 생성할 때 QKeySequence("Ctrl+F")를 사용하여 ‘Ctrl + F’ 키 조합에 대한 단축키를 설정합니다.
  • self.shortcut.activated.connect(self.show_search)로 단축키가 활성화되었을 때 show_search 메서드를 호출합니다.
  • show_search 메서드는 검색 입력 필드를 지우고 포커스를 맞추고, 사용자에게 단축키가 눌렸음을 알리는 메시지 박스를 표시합니다.

4. 최종 프로젝트 코드 작성

이제 모든 요소가 완벽히 결합된 최종 코드를 작성해 보겠습니다. 이 코드는 사용자가 ‘Ctrl + F’ 키를 누르면 검색창이 활성화되고, 그 외에도 기본적인 검색 기능이 포함되어 있습니다.


class SearchWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("검색창 예제")
        self.setGeometry(100, 100, 400, 200)

        # 부모 위젯
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        # 레이아웃 설정
        self.layout = QVBoxLayout(self.central_widget)

        # 검색 필드 추가
        self.search_input = QLineEdit(self)
        self.search_input.setPlaceholderText("검색어 입력")
        self.layout.addWidget(self.search_input)

        # 검색 버튼 추가
        self.search_button = QPushButton("검색", self)
        self.layout.addWidget(self.search_button)

        # QShortcut 설정
        self.shortcut = QShortcut(QKeySequence("Ctrl+F"), self)
        self.shortcut.activated.connect(self.show_search)

        # 검색 버튼 기능 연결
        self.search_button.clicked.connect(self.perform_search)

    def show_search(self):
        self.search_input.clear()
        self.search_input.setFocus()
        QMessageBox.information(self, "검색창 열기", "'Ctrl + F' 단축키를 눌렀습니다.")

    def perform_search(self):
        search_text = self.search_input.text()
        if search_text:
            QMessageBox.information(self, "검색 실행", f"'{search_text}'로 검색 중입니다.")
        else:
            QMessageBox.warning(self, "경고", "검색어를 입력해 주세요.")

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

이제 완성된 프로그램을 실행하면, ‘Ctrl + F’를 눌렀을 때 검색창이 열리고, 검색어를 입력한 후 검색 버튼을 누르면 입력된 검색어에 대한 메시지가 표시됩니다.

결론

이번 강좌에서는 PyQt를 사용하여 특정 키 입력으로 검색창을 열고, QShortcut을 활용하여 단축키를 설정하는 방법에 대해 알아보았습니다. PyQt는 강력한 GUI 툴킷으로 다양한 형태의 애플리케이션을 개발할 수 있습니다. 다양한 위젯과 유틸리티를 활용하여 자신만의 애플리케이션을 만들어 보세요!

우리는 간단한 검색 기능이 포함된 예제를 통해 PyQt의 기본 구조와 작동 방식을 살펴보았습니다. 앞으로도 PyQt를 활용하여 더 다양한 기능을 구현해 보시기 바랍니다. 감사합니다!