728x90

1. 목표

더보기

PySide6 QTextEdit 위젯에 다음 네 가지 문단 정렬 기능을 구현하고 연습한다.

  • 왼쪽 정렬
  • 가운데 정렬
  • 오른쪽 정렬
  • 양쪽 정렬(Justify)

그리고

  • QMenu 의 QAction 과 슬롯 함수 연결 방식 복습
  • Qt.AlignmentFlag 를 이용한 setAlignment 사용 방법 이해

 

2. 전체 로직

더보기
# mainwindow.py

from PySide6.QtCore import Qt

. . .

class MainWindow(QMainWindow):
    def __init__(self, parent=None):

        . . .
        
        self.ui.actionLeft.triggered.connect(self.align_left)
        self.ui.actionCenter.triggered.connect(self.align_center)
        self.ui.actionRight.triggered.connect(self.align_right)
        self.ui.actionJustify.triggered.connect(self.justify)
 
        . . .

    def align_left(self):
        self.editor.setAlignment(Qt.AlignmentFlag.AlignLeft)

    def align_center(self):
        self.editor.setAlignment(Qt.AlignmentFlag.AlignCenter)

    def align_right(self):
        self.editor.setAlignment(Qt.AlignmentFlag.AlignRight)

    def justify(self):
        self.editor.setAlignment(Qt.AlignmentFlag.AlignJustify)
# main.py

import sys
from PySide6.QtWidgets import QApplication

from mainwindow import MainWindow

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec())

 

3. 필요한 import + 주석 설명

더보기
from PySide6.QtCore import Qt
# Qt
#  정렬, 방향, 마우스 버튼, 키보드 수정자 등
#  다양한 상수(enum)를 모아 둔 네임스페이스
#  여기서는 AlignmentFlag.AlignLeft 같은 정렬 플래그를 사용하기 위해 import 한다


4. 메뉴 액션과 슬롯 연결하기

더보기
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # QTextEdit 에 자주 접근하므로 별칭을 만들어 둔다
        # self.ui.textEdit 을 그대로 써도 되지만, editor 라는 이름으로 쓰면 코드가 더 간결해진다
        self.editor = self.ui.textEdit

        # 문단 정렬 액션을 슬롯에 연결한다
        # Qt Designer 의 objectName 기준으로 actionLeft, actionCenter, actionRight, actionJustify 가 있다고 가정한다

        # 파일 메뉴와 툴바에 있는 좌측 정렬 액션을 align_left 함수에 연결
        self.ui.actionLeft.triggered.connect(self.align_left)

        # 가운데 정렬 액션을 align_center 함수에 연결
        self.ui.actionCenter.triggered.connect(self.align_center)

        # 우측 정렬 액션을 align_right 함수에 연결
        self.ui.actionRight.triggered.connect(self.align_right)

        # 양쪽 정렬 액션을 justify 함수에 연결
        self.ui.actionJustify.triggered.connect(self.justify)

이 단계에서는 이미 form.ui 에 다음 QAction 이 준비되어 있다고 가정한다.

  • actionLeft
  • actionCenter
  • actionRight
  • actionJustify

 

5. 정렬 기능 구현 함수

더보기

 

    def align_left(self):
        # 왼쪽 정렬
        # AlignLeft 플래그를 사용하여 현재 문단(또는 선택된 문단들)을 왼쪽으로 정렬한다
        # 일반적인 메모장 기본 정렬 방식과 동일하다
        self.editor.setAlignment(Qt.AlignmentFlag.AlignLeft)

    def align_center(self):
        # 가운데 정렬
        # 제목이나 강조하고 싶은 문장을 중앙에 배치할 때 사용한다
        self.editor.setAlignment(Qt.AlignmentFlag.AlignCenter)

    def align_right(self):
        # 오른쪽 정렬
        # 날짜나 서명처럼 오른쪽 끝에 맞추고 싶은 정보를 적을 때 유용하다
        self.editor.setAlignment(Qt.AlignmentFlag.AlignRight)

    def justify(self):
        # 양쪽 정렬
        # 왼쪽과 오른쪽 여백을 모두 맞추도록 단어 간 간격을 조절하는 정렬 방식이다
        # 문단 전체가 직사각형 블록 형태로 정렬되어 문서가 정돈된 느낌을 준다
        self.editor.setAlignment(Qt.AlignmentFlag.AlignJustify)

QTextEdit 가 문단 단위로 정렬을 처리해 주기 때문에, 별도의 커서 조작 없이 setAlignment 만 호출해도 된다.


 

6. 실행 테스트

 

7. 학습 주요 포인트

더보기

 

QTextEdit 문단 정렬 메서드

  • setAlignment 메서드는 현재 커서가 위치한 문단 또는 선택된 문단들 전체에 적용된다.
  • 인자로 Qt.AlignmentFlag 값을 전달한다.

 

Qt.AlignmentFlag 사용법

  • AlignLeft, AlignCenter, AlignRight, AlignJustify 등 다양한 정렬 상수가 준비되어 있다.
  • import Qt 후 Qt.AlignmentFlag.상수명 형태로 사용하는 패턴에 익숙해지는 것이 중요하다.

 

QAction 과 슬롯 연결

  • 메뉴와 툴바에 있는 QAction 의 triggered 시그널을
    MainWindow 의 슬롯 함수 align_left, align_center 등과 연결하여 기능을 구성한다.
  • objectName 과 코드의 액션 이름이 정확히 일치해야 한다.

 

editor 별칭 사용

  • self.ui.textEdit 을 그대로 매번 쓰는 대신
    self.editor 로 별칭을 만들어 사용하면 코드가 간결해지고 가독성이 좋아진다.
  • 수업에서는 두 방식 모두 보여주고, 별칭을 쓰는 이유를 설명해 주면 좋다.

 

파일 IO 와의 분리

  • 문단 정렬 기능은 파일 입출력과 완전히 독립적이다.
  • 이 단계에서는 의도적으로 QFile, QIODevice, QDir, QTextStream 을 사용하지 않고
    편집기 내부 서식 조작에만 집중하도록 구성한다.


 

 

단계별 완성 파일