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

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

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

一.构造函数

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_())
实时改变字体

当然,上面的枚举值是可以用管道符‘|’连接同时使用的。

四.静态方法使用

QFontDialog.getFont()     #——>元组

我们先定义一个按钮,按钮连接这样的槽函数

def func(self):
    result = QFontDialog.getFont()
    print(result)
    pass

每次调用槽函数会发现result是一个元组。元组里包含了一个字体对象还有一个布尔量。只有点击确认键布尔量才为真。利用这个方法实现字体的静态调整

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)
        btn.clicked.connect(self.func)

    def func(self):
        result = QFontDialog.getFont()
        if result[1]:
            self.label.setFont(result[0])
       self.label.adjustSize()
pass if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())

getFont()还有一个高级一些的用法

QFontDialog(Font,parent,'对话框标题',字体过滤器)

五.信号

有两个信号,一个是当前字体发生改变

QFontDialog.currentFontChanged(self, font: QtGui.QFont)

这个是只要选中的字体发生变化就发送信号(一般用在实时对话框中,上文中有案例)

QFontDialog.fontSelected(self, font: QtGui.QFont)

这个则是按下确定键时发送的信号。

猜你喜欢

转载自www.cnblogs.com/yinsedeyinse/p/11062265.html