今天学习字体对话框——QFontDialog()控件。

QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体、字号、样式等)

GUI学习之二十五——QFontDialog学习总结

一.构造函数

QFontDialog()的声明很简单,可以直接调用

fd = QFontDialog()

还有一种方法是可以指定默认字体的(启用后Sample框里会按照指定的字体显示)

font = QFont()
font.setFamily('仿宋')
font.setPointSize(24)
fd = QFontDialog(font,self)

二.对话框的使用

在这里我们借用一个按钮来启动字体对话框,然后获得对话框中选择的字体。

这里有个知识点:我们在打开对话框的时候,用open()是可以传递一个槽函数的

QFontDialog.open(self, slot: PYQT_SLOT)

在对话框打开后,会自动连接fontSelected信号与此处指定的槽函数

方法1:利用open()函数,结合selectFont()函数

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()


    def UI_test(self):
        btn = QPushButton('选择字体',self)
        font = QFont()
        font.setFamily('仿宋')
        font.setPointSize(24)
        fd = QFontDialog(font,self)
        self.fd = fd
        btn.clicked.connect(lambda :fd.open(self.func))
        pass

    def func(self,*args):
        print('字体选择:',self.fd.selectedFont().family())   #获取选择的字体
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

方案2:利用exec的返回值,结合selectFont()函数

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()


    def UI_test(self):
        btn = QPushButton('选择字体',self)
        fd = QFontDialog(self)
        def font_select():
            if fd.exec():
                print(fd.selectedFont().family())

        btn.clicked.connect(font_select)
        pass
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

因为exec是有返回值的,只有点击了OK才返回1,而取消和关闭都是返回0。只有确认选择了才获取字体。

三.选项设置

可以通过代码对按钮等选项进行设置

QFontDialog.setOption(self, option: 'QFontDialog.FontDialogOption', on: bool = ...)
#FontDialogOption枚举值
NoButtons                   # 不显示确定取消按钮(对实时的对话框有用)
DontUseNativeDialog         #在Mac上使用Qt的标准字体而不是Apple的原森字体
ScalableFonts               #显示可缩放字体
NonScalableFonts            #显示不可缩放字体
MonospacedFonts             #显示等宽字体
ProportionalFonts           #显示比例字体

我们可以试一下第一个方案,就是在一个实时对话框选择不同字体然后在label里实时改变字体

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800,500)
        self.UI_test()


    def UI_test(self):
        label = QLabel('字体',self)
        label.move(100,200)
        self.label = label
        btn = QPushButton('选择字体',self)
        font = QFont()
        font.setFamily('仿宋')
        font.setPointSize(24)
        fd = QFontDialog(font,self)
        fd.setOption(QFontDialog.NoButtons)
        self.fd = fd
        btn.clicked.connect(lambda :fd.open(self.func))
        pass
        fd.currentFontChanged.connect(self.label_font_change)
    def func(self,*args):
        print('字体选择:',self.fd.selectedFont().family())   #获取选择的字体
    def label_font_change(self,font):
        self.label.setFont(font)
        self.label.adjustSize()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
实时改变字体

相关文章: