PySide6 GUI 学习笔记——常用类及控件使用方法(常用类字体QFont)

文章目录

字体类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. 基础属性设置

python 复制代码
font = QFont()
font.setFamily("Arial")  # 设置字体族
font.setPointSize(12)    # 设置字号
font.setBold(True)       # 设置粗体
font.setItalic(True)     # 设置斜体

2. 高级样式控制

python 复制代码
font.setCapitalization(QFont.AllUppercase)  # 全大写
font.setLetterSpacing(QFont.AbsoluteSpacing, 5)  # 字间距+5px
font.setStyleStrategy(QFont.NoAntialias)    # 禁用抗锯齿

3. 序列化与反序列化

python 复制代码
font_str = font.toString()          # 保存为字符串
new_font = QFont()
new_font.fromString(font_str)       # 从字符串恢复

4. 字体信息获取

python 复制代码
print(font.family())        # 输出"Arial"
print(font.exactMatch())    # 检查是否存在精确匹配

三、应用实例

python 复制代码
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())

该示例创建了一个显示不同字体样式的窗口:

  1. 第一个标签使用Times New Roman 14pt常规字体
  2. 第二个标签使用Consolas 16pt加粗带下划线,字间距扩大50%
  3. 展示字体序列化字符串
  4. 从序列化字符串恢复字体并应用

运行效果包含:

• 不同字体族和字号

• 加粗、下划线样式

• 自定义字间距

• 字体设置的序列化/反序列化功能

程序运行结果如图:

相关推荐
好奇龙猫1 天前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
沈浩(种子思维作者)1 天前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
saoys1 天前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
njsgcs1 天前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
io_T_T1 天前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
电子小白1231 天前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
华研前沿标杆游学1 天前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然1 天前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析
唯情于酒1 天前
Docker学习
学习·docker·容器
AI小怪兽1 天前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机