PyQt개발강좌, 특정 키 입력으로 검색창 띄우기, 특정 키 입력 시 QDialog로 검색창 표시

이 글에서는 PyQt를 이용하여 특정 키 입력 시 검색창(QDialog)을 띄우는 방법에 대해 자세히 설명하겠습니다. PyQt는 파이썬에서 GUI 애플리케이션을 제작할 수 있는 매우 강력한 도구입니다. 이 강좌를 통해 PyQt의 기본 구성 요소들과 이벤트 처리, 그리고 Dialog 창을 표시하는 방법을 익힐 수 있습니다.

1. PyQt 소개

PyQt는 파이썬과 Qt 프레임워크를 결합한 것으로, 크로스 플랫폼 GUI 애플리케이션을 개발할 수 있게 해줍니다. Qt는 C++로 작성되어 있으며, 다양한 위젯과 레이아웃을 제공합니다. PyQt를 사용하면 파이썬으로도 이러한 Qt의 기능을 활용할 수 있습니다.

2. QDialog 개요

QDialog는 사용자가 특정 작업을 수행하도록 유도하는 대화형 창입니다. 일반적으로 사용자 입력을 받거나 추가적인 정보를 요청할 때 사용됩니다. PyQt에서 QDialog를 사용하여 입력 필드를 포함한 검색 창을 만드는 방법을 알아보겠습니다.

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

PyQt 애플리케이션은 QApplication 객체를 생성하고, QMainWindow와 같은 주요 창을 설정하여 시작합니다. 아래의 기본 코드를 통해 애플리케이션의 구조를 이해해 봅시다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt 검색 예제")
        self.setGeometry(100, 100, 600, 400)

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

4. 특정 키 입력으로 QDialog 띄우기

이번 섹션에서는 사용자가 특정 키(예: ‘S’ 키)를 입력했을 때 검색 창이 열리도록 구현합니다. 이를 위해 키 이벤트를 처리하는 메서드를 오버라이드해야 합니다.

4.1 키 이벤트 핸들링

QMainWindow 클래스의 이벤트 메서드인 keyPressEvent를 오버라이드하여 키 입력을 감지하고, 특정 키가 눌렸을 때 QDialog를 호출합니다.

from PyQt5.QtWidgets import QDialog, QLineEdit, QVBoxLayout, QPushButton

class SearchDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("검색")
        self.setGeometry(200, 200, 300, 100)
        
        self.layout = QVBoxLayout()
        self.search_input = QLineEdit(self)
        self.search_input.setPlaceholderText("검색어를 입력하세요...")
        self.layout.addWidget(self.search_input)
        
        self.search_button = QPushButton("검색", self)
        self.search_button.clicked.connect(self.perform_search)
        self.layout.addWidget(self.search_button)
        
        self.setLayout(self.layout)

    def perform_search(self):
        search_query = self.search_input.text()
        print("검색어:", search_query)
        self.accept()  # 대화상자를 닫습니다.

class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt 검색 예제")
        self.setGeometry(100, 100, 600, 400)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_S:  # 'S' 키를 누르면
            dialog = SearchDialog()
            dialog.exec_()  # 대화상자를 열고 사용자 입력 기다림

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

5. 예제 설명

위의 예제 코드는 주요 두 클래스를 정의했습니다:

  • SearchDialog: 이 클래스는 QDialog를 상속받아 검색 입력 필드와 버튼을 포함합니다. 사용자가 검색어를 입력하고 버튼을 클릭하면 perform_search 메서드가 호출되어 콘솔에 검색어를 출력하고 대화상자가 닫힙니다.
  • MyApp: 이 클래스는 QMainWindow를 상속받아 메인 애플리케이션 창을 구성합니다. keyPressEvent를 오버라이드하여 ‘S’ 키 입력을 감지하고, 그에 따라 SearchDialog를 실행합니다.

6. 키 입력에 따른 다양한 동작 구현

이번 코드는 특정 키 입력 시 QDialog를 호출하는 기본적인 예제를 보여주었습니다. 이 방법을 확장하여 다양한 키 입력에 따라 다른 동작을 수행하는 것도 가능합니다. 예를 들어, ‘F’ 키를 눌렀을 때 파일 검색 기능을 구현하거나 ‘C’ 키를 눌렀을 때 고객 검색 기능으로 확장할 수 있습니다.

6.1 여러 키 입력 처리하기

여러 키를 처리하기 위해서는 keyPressEvent 메서드 내에 조건문을 추가하면 됩니다. 아래의 코드는 ‘F’와 ‘C’ 키에 대한 예시입니다.

def keyPressEvent(self, event):
    if event.key() == Qt.Key_S:  # 검색 대화상자
        dialog = SearchDialog()
        dialog.exec_()
    elif event.key() == Qt.Key_F:  # 파일 검색 대화상자
        print("파일 검색 호출")
    elif event.key() == Qt.Key_C:  # 고객 검색 대화상자
        print("고객 검색 호출")

7. 결론

이번 강좌를 통해 PyQt를 사용하여 특정 키 입력 시 QDialog를 띄우는 방법을 배웠습니다. 기본적인 PyQt 애플리케이션 구조와 이벤트 처리 기법을 익혔으며, 이를 활용하여 사용자의 입력에 따라 유연하게 동작하는 애플리케이션을 만들 수 있습니다.

PyQt를 활용한 GUI 프로그래밍은 다양한 가능성을 제공합니다. 본 강좌를 바탕으로 더 많은 기능을 추가하고, 학습한 내용을 기반으로 실제 프로젝트에 적용해보세요. 더 나아가 여러분만의 창의적인 애플리케이션을 개발해보시기 바랍니다.

다음 강좌에서는 PyQt의 더 깊이 있는 내용들에 대해 다루어 보겠습니다. 감사합니다!