QFontDialog简介

QFontDialog控件是一个常用的字体选择对话框,继承自QDialog,是Qt内建的标准对话框之一。它可以让用户选择所显示的文本的字体类型,字号大小、样式和格式。通过QFontDialog控件可以在界面中对文本的字体样式进行精确设定。使用QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号大小样式和格式。

QFontDialog常用方法有:

  • getFont(): 打开字体对话框,如果点击确定按钮,则返回True和选择的字体;
  • currentFont(): 返回当前字体;
  • open(): 打开对话框并将其fontSelected()信号连接到接收器和指定的插槽。当对话框关闭时,信号将从插槽断开;
  • selectedFont(): 返回用户通过单击“确定”或等效按钮时选择的字体;
  • setCurrentFont(): 将给定的字体设置QFontDialog中突出显示的字体;
  • setOption(): 如果参数on为True,则将给定选项设置为启用,否则清除该给定选项;
  • setOptions(): 设置给定字体选项;
  • testOption(): 如果已启用给定选项,则返回True,否则返回False;
  • options(): 返回FontDialogOptions类型的枚举值。

FontDialogOptions取值及含义:

  • NoButtons: 没有按钮,表示选择所有字体;
  • DontUseNativeDialog: 不使用系统原生对话框;
  • ScalableFonts: 可缩放字体;
  • NonScalableFonts: 不可缩放字体;
  • MonospacedFonts: 等宽字体;
  • ProportionalFonts: 等比例字体。

QFontDialog常用信号:

  • currentFontChanged: 当前字体样式发生改变时发射该信号;
  • fontSelected: 字体样式最终被选择时发射该信号。

QFontDialog类继承关系:

python QML 文档 python qfont_pyside2

 

测试QFontDialog

创建文件qfontdialog.py,通过字体选择对话框选择相应字体,将字体的效果显示在一个QLabel标签页的文本上,完整代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, 
                             QPushButton, QFontDialog, QVBoxLayout)
 
class DemoFontDialog(QWidget):
    def __init__(self, parent=None):
        super(DemoFontDialog, self).__init__(parent)       
        
        # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QFontDialog Demo!')      
        # 设置窗口大小
        self.resize(360, 240)
        
        self.initUi()
        
    def initUi(self):
        
        vLayout = QVBoxLayout(self)
        vLayout.addSpacing(10)
        
        btnTest = QPushButton('调整字体', self)
        btnTest.clicked.connect(self.onSetFont)
        
        self.label_text = QLabel('实战PyQt5: \n测试QFontDialog')
        self.label_text.setAlignment(Qt.AlignCenter)
        self.label_text.setFont(QtGui.QFont(self.font().family(), 16))
        
        vLayout.addWidget(btnTest)
        vLayout.addWidget(self.label_text)
        
        self.setLayout(vLayout)
                
    def onSetFont(self):
        font,ok = QFontDialog.getFont()
        if ok:
            self.label_text.setFont(font)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoFontDialog()
    window.show()
    sys.exit(app.exec())

运行结果如下图:

python QML 文档 python qfont_pyqt5_02

测试QFontDialog

本文知识点

  • 使用QFontDialog的getFont方法获得字体;
  • 修改QLabel文本字体;
  • QLabel文字字体的对齐方式。