본문으로 바로가기
반응형

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_())
반응형