9.12 문단 정렬
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 을 사용하지 않고
편집기 내부 서식 조작에만 집중하도록 구성한다.
단계별 완성 파일
