이번 강좌에서는 PyQt를 사용하여 자동완성 기능을 구현하는 방법을 배우고, 그 목록의 스타일을 사용자 정의하고 인터랙션을 개선하는 기법을 살펴봅니다. PyQt는 강력한 GUI 프레임워크로, 다양한 사용자 인터페이스를 개발할 수 있도록 도와줍니다.
1. PyQt 소개
PyQt는 Python 바인딩으로 Qt 애플리케이션 프레임워크를 제공합니다. PyQt는 사용자 친화적인 GUI를 구축하기 위한 위젯, 레이아웃 및 기타 구성 요소를 제공합니다. PyQt는 크로스 플랫폼이며, 다양한 운영 체제에서 실행 가능합니다.
1.1. PyQt 설치하기
PyQt를 설치하려면 pip를 사용할 수 있습니다. 다음 명령어로 PyQt5를 설치하세요:
pip install PyQt5
2. 자동완성 기능 구현하기
자동완성은 사용자가 입력하는 동안 가능한 옵션을 제공하는 기능입니다. 이를 통해 사용자 경험을 개선할 수 있습니다. PyQt에서는 QLineEdit
와 QCompleter
를 사용하여 이 기능을 구현할 수 있습니다.
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를 만들어보세요!