PyQt在qrc文件中添加自定义字体并使用
使用pyqt开发程序时有时为了界面美观需要使用一些自定义的字体。
为了方便传播,需要将字体文件嵌入进数据中,这样软件发送给别人时,他人不必拥有指定字体也能看到美观的界面。
该文章主要描述了如何在qrc文件中添加自定义字体文件,并在编译成py文件后,在程序中正常使用该字体。
Step1
在QtDesigner中新建qrc资源文件并添加指定字体。
此处我们以开源字体霞骛文楷
举例。
<RCC>
<qresource prefix="resources">
<file>fontFile/霞骛文楷.ttf</file>
</qresource>
</RCC>
关闭qrc文件,将qrc文件转换为py文件。
pyrcc5 test.qrc -o test_rc.py
注:转换后的py文件要以“_rc”结尾
Step2
打开主程序的py文件
from PyQt5.QtGui import QFontDatabase, QFont
import test_rc # 此处直接导入qrc转换后的py文件
fontDb = QFontDatabase()
fontID = fontDb.addApplicationFont(":resources/fontFile/霞骛文楷.ttf") # 此处的路径为qrc文件中的字体路径
fontFamilies = fontDb.applicationFontFamilies(fontID)
print(fontFamilies) # ['LXGW WenKai']
self.setFont(QFont('LXGW WenKai'))
在此需要阐明一个概念,即字体名和字体文件名是不一样的。
霞骛文楷.ttf
的字体文件名为霞骛文楷.ttf
,但是字体名却是LXGW WenKai
,这个名字外部不会显示出来,需要通过调用程序读取。
在往程序中添加完字体后,使用返回的id获取字体的字体名,再通过setFont方法将其添加到程序中。
Step3
此时无论是在QtDesigner还是主程序中,都可以通过直接在设置控件的字体样式为我们自定义的字体。
self.labelFileName1.setStyleSheet("QLabel {font: 28px \"LXGW WenKai\"; color: rgb(45, 98, 147);")
QLabel {
font: 28px "LXGW WenKai";
color: rgb(45, 98, 147);
}
此时直接使用字体名就可以,并且需要使用引号包裹,无需绝对路径。
Step4
上述三个步骤,可以保证程序在运行时,字体显示不会错误,但是由于是在主程序中添加字体文件,只有运行时才会展示,在QtDesigner中,想要实时预览自定义字体效果应该怎样呢。
首先需要在QtDesigner中关掉当前的ui文件,这样“设置”下方的“附加字体”选项才会启用。
选中“设置”—>“附加字体”,添加自定义字体文件,可以看到,字体文件在被导入进时,会显示出字体文件的文件名和字体名(这也是快速获取字体名的一个方法)
这时候再重开ui文件,确保自己的qss字体名引用正确,就可以在QtDesigner中实时预览字体效果。