PyQt개발강좌, 자동완성 목록 스타일 및 인터랙션 변경

이번 강좌에서는 PyQt를 사용하여 자동완성 기능을 구현하는 방법을 배우고, 그 목록의 스타일을 사용자 정의하고 인터랙션을 개선하는 기법을 살펴봅니다. PyQt는 강력한 GUI 프레임워크로, 다양한 사용자 인터페이스를 개발할 수 있도록 도와줍니다.

1. PyQt 소개

PyQt는 Python 바인딩으로 Qt 애플리케이션 프레임워크를 제공합니다. PyQt는 사용자 친화적인 GUI를 구축하기 위한 위젯, 레이아웃 및 기타 구성 요소를 제공합니다. PyQt는 크로스 플랫폼이며, 다양한 운영 체제에서 실행 가능합니다.

1.1. PyQt 설치하기

PyQt를 설치하려면 pip를 사용할 수 있습니다. 다음 명령어로 PyQt5를 설치하세요:

pip install PyQt5

2. 자동완성 기능 구현하기

자동완성은 사용자가 입력하는 동안 가능한 옵션을 제공하는 기능입니다. 이를 통해 사용자 경험을 개선할 수 있습니다. PyQt에서는 QLineEditQCompleter를 사용하여 이 기능을 구현할 수 있습니다.

2.1. 기본 자동완성 예제

아래 코드는 PyQt를 사용하여 기본 자동완성 기능을 구현한 예제입니다.

import sys
from PyQt5.QtWidgets import QApplication, QLineEdit, QVBoxLayout, QWidget, QStringListModel, QCompleter

class AutoCompleteExample(QWidget):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("자동완성 예제")
        self.setGeometry(100, 100, 300, 200)

        layout = QVBoxLayout()
        self.line_edit = QLineEdit(self)
        self.line_edit.setPlaceholderText("여기에 입력하세요...")
        
        # 자동완성 항목
        words = ["사과", "바나나", "체리", "딸기", "포도"]
        model = QStringListModel(words)
        completer = QCompleter(model)
        self.line_edit.setCompleter(completer)

        layout.addWidget(self.line_edit)
        self.setLayout(layout)

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

3. 자동완성 목록 스타일 변경하기

이제 기본 자동완성 기능이 구현되었습니다. 다음 단계로, 이 목록의 스타일을 사용자 정의해봅시다. PyQt에서는 스타일 시트(CSS)를 사용하여 UI 요소의 스타일을 변경할 수 있습니다.

3.1. 스타일 시트를 사용한 변경

아래 코드는 자동완성 목록의 스타일을 변경하는 방법을 보여줍니다. 목록의 배경색, 텍스트 색상, 선택된 항목의 색상을 정의할 수 있습니다.

style = """
        QCompleter {
            background-color: #f0f0f0;
            color: #333;
            padding: 5px;
        }
        QCompleter::item:selected {
            background-color: #0056b3;
            color: white;
        }
    """
    self.line_edit.setStyleSheet(style)

위 코드를 추가하면 자동완성 목록의 배경색 및 선택된 항목의 색상이 변경됩니다. 이를 통해 사용자에게 더욱 직관적인 UI를 제공할 수 있습니다.

4. 자동완성 인터랙션 개선하기

자동완성 기능의 유용성을 높이기 위해 몇 가지 상호작용을 추가할 수 있습니다. 예를 들어, 특정 키를 눌렀을 때 자동완성 목록이 나타나거나, 사용자가 입력한 내용에 따라 필터링하여 목록을 동적으로 업데이트할 수 있습니다.

4.1. 키 입력에 따른 목록 표시

사용자가 입력하는 동안 자동완성 목록을 동적으로 필터링할 수 있습니다. 이를 위해 textChanged 신호를 연결하여 사용자가 입력할 때마다 목록을 업데이트합니다.

def on_text_changed(self, text):
        filtered_words = [word for word in words if word.startswith(text)]
        model.setStringList(filtered_words)

    self.line_edit.textChanged.connect(self.on_text_changed)

이 코드를 추가하면 사용자가 QLineEdit에 입력할 때마다 자동완성 목록이 동적으로 업데이트됩니다.

4.2. 사용자 정의 필터링 기능

특정 조건에 따라 리스트를 필터링할 수 있습니다. 예를 들어, 단어의 길이에 따라 자동완성 목록을 필터링할 수 있습니다. 아래와 같이 사용자 정의 필터링 함수를 만들 수 있습니다.

def custom_filter(self, text):
        return len(text) > 2 and text.startswith("사")

    def on_text_changed(self, text):
        filtered_words = [word for word in words if self.custom_filter(word)]
        model.setStringList(filtered_words)

5. 결론

이번 강좌에서는 PyQt를 사용하여 자동완성 기능을 구현하고, 그 목록의 스타일을 변경하며, 인터랙션을 개선하는 방법에 대해 배웠습니다. 이러한 기능을 통해 사용자 경험을 한층 개선할 수 있습니다. 다양한 옵션을 고려하여 자신만의 UI를 만들어보세요!

6. 참고 자료

이 글은 PyQt를 배우고자 하는 모든 분들을 위한 자료입니다. 많은 도움이 되길 바랍니다!