728x90

 

1. 목표

더보기

 

  • File 메뉴의 Print 항목이나 툴바 아이콘을 눌렀을 때
    운영체제의 인쇄 대화상자를 띄우고
    선택된 프린터로 QTextEdit 의 내용을 출력할 수 있도록 한다.
  • QPrinter, QPrintDialog, QTextEdit.print_ 를 사용하는
    PySide6 표준 패턴을 익힌다.
  • 파이썬 open 같은 기본 파일 함수는 사용하지 않고
    Qt 가 제공하는 프린트 지원 클래스를 사용한다.

 


 

2. 전체 로직

더보기
# mainwindow.py

. . .

from PySide6.QtWidgets import QDialog
from PySide6.QtPrintSupport import QPrinter, QPrintDialog

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

        . . .
        
        self.ui.actionPrint.triggered.connect(self.print_file)
 
        . . .

    def print_file(self):
        printer = QPrinter(QPrinter.PrinterMode.HighResolution)
        dialog = QPrintDialog(printer, self)

        if dialog.exec() == QDialog.DialogCode.Accepted:
            self.editor.print_(printer)
# 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 + 주석 설명

더보기
# QPrintDialog 의 exec 결과를 비교할 때 DialogCode 사용
from PySide6.QtWidgets import QDialog 

# QPrinter
#   실제 출력 장치(프린터)를 표현하는 클래스
#   해상도 모드, 출력 용지, 방향, 용지 크기 등을 설정할 수 있다
#
# QPrintDialog
#   운영체제의 인쇄 대화상자를 띄우는 클래스
#   사용자가 프린터, 페이지 범위, 복사 수 등을 선택할 수 있다
from PySide6.QtPrintSupport import QPrinter, QPrintDialog

 

4. 메뉴 액션과 슬롯 연결하기 (actionPrint↔ print_file)

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

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # 텍스트 편집 위젯에 자주 접근하므로 별칭을 만들어 둔다
        self.editor = self.ui.textEdit

        # 9.6 프린트 기능
        # 메뉴 File 의 Print 항목, 툴바의 프린트 아이콘, 단축키 Ctrl+P 는
        # 모두 actionPrint 에 연결되어 있고
        # 여기서 그 시그널을 print_file 메서드에 연결한다
        self.ui.actionPrint.triggered.connect(self.print_file)

메뉴, 툴바, 단축키가 모두 같은 인쇄 로직을 공유하게 됩니다.


 

5. 프린트 기능 구현 함수

더보기
    def print_file(self):
        '''
        9.6 프린트 기능
        QPrinter 와 QPrintDialog 를 사용해
        현재 QTextEdit 의 내용을 실제 프린터로 보낸다
        '''

        # 1  인쇄용 QPrinter 객체를 생성한다
        #    HighResolution 모드는 고해상도로 렌더링하도록 설정하는 옵션이다
        printer = QPrinter(QPrinter.PrinterMode.HighResolution)

        # 2  인쇄 대화상자를 생성한다
        #    두 번째 인자로 부모 위젯(self) 을 넘겨서
        #    현재 창 위에 모달로 뜨도록 한다
        dialog = QPrintDialog(printer, self)

        # 3  dialog.exec 는 사용자가 대화상자에서 어떤 버튼을 눌렀는지 반환한다
        #    DialogCode.Accepted 인 경우에는 사용자가 인쇄를 허용한 것이다
        if dialog.exec() == QDialog.DialogCode.Accepted:
            # 4  QTextEdit 의 내용을 QPrinter 로 출력한다
            #    PySide6 에서는 print 가 아닌 print_ 메서드를 사용한다
            #    printer 에 설정된 프린터, 용지, 방향에 맞게 내용이 전송된다
            self.editor.print_(printer)

 

QPrinter 를 하나 만들고, QPrintDialog 에 넘긴 뒤
사용자가 인쇄를 승인했을 때만 textEdit.print_ 를 호출하는 흐름입니다.


 

6. 실행 테스트

더보기

1 텍스트 입력

  • 중앙의 QTextEdit 에 테스트용 문장을 여러 줄 입력한다.
    예시
    프린트 테스트입니다
    PySide6 메모장 예제입니다

 

 

 

 

2 File 메뉴에서 Print 선택

  • 메뉴바에서 File → Print 를 클릭하거나
    툴바의 프린트 아이콘을 클릭하거나
    단축키 Ctrl+P 를 눌러도 된다.

 

 

 

 

3 인쇄 대화상자 확인

  • 운영체제의 기본 인쇄 대화상자가 나타나는지 확인한다.
  • 실제 프린터가 없다면 PDF 프린터, XPS, 가상 프린터 등을 선택해도 된다.

 

5 인쇄 승인

  • 인쇄 대화상자에서 확인 혹은 Print 를 눌러 인쇄를 시작한다.
  • 선택한 프린터로 출력물이 전송되는지 확인한다.

 

6 취소 동작 확인

  • 다시 Print 를 눌러 대화상자를 띄운 뒤, 이번에는 취소를 눌러본다.
  • 이때는 QTextEdit.print_ 가 호출되지 않으므로
    프린터로 아무 것도 전송되지 않아야 한다.


7.학습 주요 포인트

더보기

1 프린트 기능의 기본 구성 요소

  • QPrinter 출력 대상
  • QPrintDialog 사용자에게 프린터와 옵션을 선택받는 UI
  • QTextEdit.print_ 문서 내용을 프린터로 보내는 메서드

 

2 QPrinter 의 역할 이해

  • PrinterMode.HighResolution 처럼 출력 품질을 조정할 수 있고
  • 나중에 페이지 방향, 용지 크기, 여백 등을 세밀하게 설정하는 API 도 제공한다.

 

3 QPrintDialog 와 DialogCode

  • dialog.exec 가 반환하는 값으로
    사용자가 인쇄를 진행할지, 취소할지를 판단한다.
  • Accepted 인 경우에만 실제 프린트 호출을 해야
    의도치 않은 인쇄를 막을 수 있다.

 

4 QTextEdit.print_ 사용 이유

  • PySide6 에서는 print 라는 이름 대신 print_ 메서드를 사용한다.
  • QTextEdit 이 내부의 QTextDocument 를 QPrinter 에 바로 그려주므로
    별도의 페이지 계산 로직 없이 단순하게 인쇄 기능을 추가할 수 있다.

 

5 GUI 구조와의 연결

  • form.ui 에서 이미 actionPrint 가 메뉴와 툴바, 단축키에 묶여 있으며
    파이썬 코드에서는 이 액션을 print_file 슬롯에만 연결하면 된다.
  • 이 패턴은 프린트 미리보기, PDF 내보내기, 종료 기능 등
    다른 액션들과 슬롯을 연결할 때도 그대로 반복된다.

 

6 다음 단계와의 연계

  • 9.7 프린트 미리보기 기능은
    QPrintPreviewDialog 와 QPrinter 를 사용해서
    실제 인쇄 전에 화면으로 렌더링해 보는 기능이다.
  • 9.8 PDF 내보내기 기능은
    QPrinter 의 출력 포맷을 PdfFormat 으로 바꾸고
    파일로 저장하는 방식으로 구현된다.
  • 지금 단계에서 배운 QPrinter 기반 출력 흐름이
    이후 두 단계의 기반이 된다.

 

단계별 완성 파일