QScintilla는 PyQt5를 통해 Python에서 사용할 수 있는 강력한 텍스트 에디팅 컴포넌트입니다. 이 문서에서는 QScintilla의 다양한 기능과 설정 방법에 대해 설명합니다.
1. 소개
이 장은 QScintilla와 PyQt에 대한 기본적인 이해가 없더라도 단계별로 따라올 수 있도록 작성되었습니다.
1.1. QScintilla란?
QScintilla는 C++로 작성된 Scintilla 텍스트 에디터를 Qt 프레임워크에서 사용할 수 있도록 래핑한 구성요소입니다. PyQt5는 이를 Python에서도 활용할 수 있도록 합니다.
1.2. 주요 기능
- 30개 이상의 프로그래밍 언어에 대한 내장 구문 강조
- 사용자 정의 구문 강조 가능
- 자동 완성 및 호출 팁(call tips) 제공
- 여백, 줄 번호, 접기 마커 등의 사용자 정의 가능한 마진 영역
- 다양한 글꼴 스타일 및 색상 설정
2. 설치 가이드
2.1. Windows
Python 3.x 버전과 호환되는 최신 PyQt5 라이브러리를 설치하세요. pip 패키지 관리자를 사용하여 아래 명령을 실행할 수 있습니다:
pip install PyQt5
2.2. GNU/Linux
다음 명령어로 필요한 라이브러리를 설치할 수 있습니다:
sudo apt-get install python3-pyqt5.qsci
2.3. Mac OS
pip를 통해 설치할 수 있습니다:
pip install PyQt5
3. QScintilla 옵션 및 특수 기능
3.1. 줄 바꿈
줄 바꿈 모드를 설정하는 메서드는 다음과 같습니다:
editor.setWrapMode(QsciScintilla.WrapWord)
3.2. 줄바꿈 시각 표시
줄 바꿈 표시를 설정하려면 다음 메서드를 사용합니다:
editor.setWrapVisualFlags(QsciScintilla.WrapFlagByText)
3.3. 자동 완성
자동 완성을 활성화하고 설정하는 예제 코드는 다음과 같습니다:
editor.setAutoCompletionSource(QsciScintilla.AcsAll)
editor.setAutoCompletionThreshold(1)
4. 사용자 정의 Lexer 생성
사용자 정의Lexer를 생성하는 간단한 예제입니다:
class CustomLexer(QsciLexerCustom):
def __init__(self, parent=None):
super().__init__(parent)
self.setDefaultColor(QColor("#000000"))
self.setDefaultPaper(QColor("#ffffff"))
self.init_styles()
def init_styles(self):
self.setColor(QColor("#0000ff"), 1) # 키워드 색상
self.setFont(QFont("Courier", 10, weight=QFont.Bold), 1)
def styleText(self, start, end):
text = bytearray(self.parent().text(), "utf-8")[start:end].decode("utf-8")
tokens = re.findall(r"(\b\w+\b|\W+)", text)
current_style = 0
for token in tokens:
if token in ["if", "else", "while"]:
self.setStyling(len(token), 1)
else:
self.setStyling(len(token), 0)
5. 기본 예제
Hello World 예제를 통해 QScintilla의 기본 사용법을 배워보겠습니다:
app = QApplication(sys.argv)
editor = QsciScintilla()
editor.setText("Hello World")
editor.show()
sys.exit(app.exec_())