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() Liststr 获取所有请求的字体族
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. 从序列化字符串恢复字体并应用

运行效果包含:

• 不同字体族和字号

• 加粗、下划线样式

• 自定义字间距

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

程序运行结果如图:

相关推荐
易小染13 小时前
AI-Agent学习-LangChain-01
学习·langchain
myenjoy_113 小时前
MQTT 与 Sparkplug B——从车间到云端的最后一公里
网络·python
nnsix14 小时前
Unity 贴图压缩格式 笔记
笔记·unity·贴图
颜酱14 小时前
LangChain 输出解析器:把模型回复变成你要的数据
python·langchain
2401_8734794014 小时前
企业安全运营中,如何用IP离线库提前发现失陷主机?三步实现风险画像
网络·数据库·python·tcp/ip·ip
xian_wwq15 小时前
【学习笔记】「大模型安全:攻击面演化史」第 03 篇-数据投毒
笔记·学习·ai安全
weixin_5231853215 小时前
Java基础知识总结(四):引用数据类型与参数传递机制
java·开发语言·python
sheeta199815 小时前
LeetCode 每日一题笔记 日期:2026.06.06 题目:2196. 根据描述创建二叉树
笔记·算法·leetcode
码农飞哥15 小时前
我把RAG召回率从60%提到90%,就改了这两件事
python·知识库·向量检索·rag·效果提示
宸津-代码粉碎机15 小时前
Spring AI企业级实战|从RAG优化到Agent多工具调度
java·大数据·人工智能·后端·python·spring