파이썬/PyQt5

파이썬(Python) PyQt5 파일 다이얼로그 QFontDialog 사용하는 방법

녹두장군 2021. 12. 6. 13:46
반응형

QFontDialog 는 사용자가 원하는 글자 스타일을 편리하게 세팅할 수 있도록 제공하는 다이얼로그 창입니다. QFontDialog 클래스의 static 함수 getFont() 를 이용해서 객체를 생성할 수 있으며, 모달 다이얼로그 창입니다.

 

▼ 일반적인 윈도우 OS 에서 보는 Font Dialog 창입니다.

 

▼ Font File Dialog 를 띄우기 위한 QPushButton 버튼을 추가합니다. QMainWindow 에 위젯의 위치를 지정하기 위해 setGeometry() 함수를 사용했습니다. 파라미터 값은 차례대로 x, y, width, height 값을 나타냅니다. 그리고 clicked 시그널에 dialog_open() Slot 을 연결했습니다. 

# QButton 위젯 생성
self.button = QPushButton('Color Dialog Button', self)
self.button.clicked.connect(self.dialog_open)
self.button.setGeometry(10, 10, 200, 50)

 

▼ Font File Dialog 에서 사용자가 선택한 폰트 정보를 표시할 라벨을 생성합니다. 값이 제대로 반환되는지 확인하기 위한 용도입니다.

# QFontDialog 반환값 표시 라벨
self.colorLabel = QLabel(self)
self.colorLabel.setGeometry(10, 60, 200, 50)

 

▼ Font File Dialog 를 띄우기 위해 추가한 QPushButton 에 연결한 함수 dialog_open() 의 구현 내용입니다. QFontDialog 는 생성자를 통해서 객체를 생성할 필요없이 static 함수 getFont() 를 이용합니다. QFontDialog 는   모달 형식으로 창이 열립니다. 그리고 QtWidgets 패키지에 포함되어 있는 위젯입니다. 사용자가 폰트와 스타일을 지정하고 창을 닫으면 QFont 객체를 반환합니다. QFont 의 toString() 함수를 사용해서 QFontDialog 다이얼로그가 반환한 속성값들을 콤마로 구분한 리스트 형태로 출력이 가능합니다. 예를 들어서 “Agency FB,9,-1,5,50,0,0,0,0,0,Regular “ 같은 형태로 반환합니다.

from PyQt5.QtWidgets import QFontDialog

# 폰트 다이얼로그 띄우기
@pyqtSlot()
def dialog_open(self):
    # QFont 를 리턴받는다.
    font, ok = QFontDialog.getFont()
    if ok:
        self.colorLabel.setText(font.toString())

 

▼ 위젯에 폰트를 적용하기 위해서는 setFont()함수를 사용합니다. 파라미터로 QFont 객체를 넘깁니다.

# QFont 를 리턴받는다.
font, ok = QFontDialog.getFont()
if ok:
    self.colorLabel.setText(font.toString())
    self.colorLabel.setFont(font)

 

▼ 결과 화면은 다음과 같습니다. QFontDialog 로 받은 QFont 의 값을 QLabel 에 표시하고 사용자가 설정한 폰트까지 적용했습니다.

 

▼ 전체 소스는 다음과 같습니다.

#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QLabel, QMainWindow, QPushButton, \
    QApplication, QFontDialog
from PyQt5.QtCore import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 윈도우 설정
        self.setGeometry(300, 300, 400, 300)  # x, y, w, h
        self.setWindowTitle('Status Window')

        # QButton 위젯 생성
        self.button = QPushButton('Color Dialog Button', self)
        self.button.clicked.connect(self.dialog_open)
        self.button.setGeometry(10, 10, 200, 50)

        # QColorDialog 반환값 표시 라벨
        self.colorLabel = QLabel(self)
        self.colorLabel.setGeometry(10, 60, 200, 50)

    # 폰트 다이얼로그 띄우기
    @pyqtSlot()
    def dialog_open(self):
        # QFont 를 리턴받는다.
        font, ok = QFontDialog.getFont()
        if ok:
            self.colorLabel.setText(font.toString())
            self.colorLabel.setFont(font)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
반응형