文章目录
- 一、QFont常用方法
- 二、常用方法总结
- 1. 基础属性设置
- 2. 高级样式控制
- 3. 序列化与反序列化
- 4. 字体信息获取
- 三、应用实例
字体类QFont
用于设置界面控件上显示的字体,它包含字体名称、字体尺寸、粗体字、斜体字、删除线、上划线、下划线、字体间距等属性。
如果指定的字体在使用时没有对应的字体文件,Qt
将自动选择最接近的字体,如果要显示的字符在字体中不存在,则字符会被显示为一个空心方框。
字体类在QtGui
模块中,通过from PySide6.QtGui import QFont
语句导入。
一、QFont常用方法
方法名称 | 参数 | 返回值 | 说明 |
---|---|---|---|
init | 无 | - | 创建默认字体(继承应用默认设置) |
init | QFont | - | 复制构造函数 |
init | family:str, pointSize:int=-1, weight:int=-1, italic:bool=False | - | 通过属性构造字体 |
bold() | 无 | bool | 判断是否粗体 |
capitalization() | 无 | QFont.Capitalization | 获取大写样式 |
defaultFamily() | 无 | str | 获取当前样式提示的默认字体族 |
families() | 无 | List[str] | 获取所有请求的字体族 |
family() | 无 | str | 获取主字体族 |
fixedPitch() | 无 | bool | 判断等宽字体 |
fromString(descrip:str) | 无 | bool | 从字符串恢复字体设置 |
isCopyOf(f:QFont) | 无 | bool | 判断是否完全拷贝 |
italic() | 无 | bool | 判断斜体 |
kerning() | 无 | bool | 判断是否启用字距调整 |
overline() | 无 | bool | 判断上划线 |
pixelSize() | 无 | int | 获取像素尺寸 |
pointSize() | 无 | int | 获取磅值尺寸 |
setBold(enable:bool) | 无 | None | 设置粗体状态 |
setCapitalization(caps) | 无 | None | 设置大写样式 |
setFamily(family:str) | 无 | None | 设置主字体族 |
setItalic(b:bool) | 无 | None | 设置斜体状态 |
setPixelSize(pixelSize:int) | 无 | None | 设置像素尺寸 |
setPointSize(pointSize:int) | 无 | None | 设置磅值尺寸 |
setStyle(style:QFont.Style) | 无 | None | 设置字体样式 |
setUnderline(enable:bool) | 无 | None | 设置下划线 |
toString() | 无 | str | 序列化为字符串 |
weight() | 无 | QFont.Weight | 获取字重等级 |
二、常用方法总结
1. 基础属性设置
font = QFont()
font.setFamily("Arial") # 设置字体族
font.setPointSize(12) # 设置字号
font.setBold(True) # 设置粗体
font.setItalic(True) # 设置斜体
2. 高级样式控制
font.setCapitalization(QFont.AllUppercase) # 全大写
font.setLetterSpacing(QFont.AbsoluteSpacing, 5) # 字间距+5px
font.setStyleStrategy(QFont.NoAntialias) # 禁用抗锯齿
3. 序列化与反序列化
font_str = font.toString() # 保存为字符串
new_font = QFont()
new_font.fromString(font_str) # 从字符串恢复
4. 字体信息获取
print(font.family()) # 输出"Arial"
print(font.exactMatch()) # 检查是否存在精确匹配
三、应用实例
import sys
from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
from PySide6.QtGui import QFont
class FontDemo(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
# 基本字体设置
label1 = QLabel("标准字体示例")
font1 = QFont("Times New Roman", 14)
label1.setFont(font1)
# 高级样式
label2 = QLabel("高级样式示例")
font2 = QFont()
font2.setFamily("Consolas")
font2.setPointSize(16)
font2.setBold(True)
font2.setUnderline(True)
font2.setLetterSpacing(QFont.PercentageSpacing, 150) # 字间距150%
label2.setFont(font2)
# 序列化演示
font_str = font2.toString()
label3 = QLabel(f"序列化结果:{font_str}")
# 反序列化恢复
font3 = QFont()
font3.fromString(font_str)
label4 = QLabel("反序列化恢复的字体")
label4.setFont(font3)
layout.addWidget(label1)
layout.addWidget(label2)
layout.addWidget(label3)
layout.addWidget(label4)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = FontDemo()
window.resize(400, 200)
window.show()
sys.exit(app.exec())
该示例创建了一个显示不同字体样式的窗口:
- 第一个标签使用Times New Roman 14pt常规字体
- 第二个标签使用Consolas 16pt加粗带下划线,字间距扩大50%
- 展示字体序列化字符串
- 从序列化字符串恢复字体并应用
运行效果包含:
• 不同字体族和字号
• 加粗、下划线样式
• 自定义字间距
• 字体设置的序列化/反序列化功能
程序运行结果如图: