PyQt5 QScintilla의 한국어 학습 가이드

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_())

태그: PyQt5 qscintilla python lexer custom_lexer

6월 28일 19:21에 게시됨