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. 从序列化字符串恢复字体并应用

运行效果包含:

• 不同字体族和字号

• 加粗、下划线样式

• 自定义字间距

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

程序运行结果如图:

相关推荐
VidDown3 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
遇印记4 小时前
传输层,网络层
运维·服务器·网络·windows·学习
死磕音视频5 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
clorinda6 小时前
PyQt5学习:从界面搭建到与机器学习实战
学习
pride.li7 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook7 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺7 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
欣欣之王来了7 小时前
Vue3项目脚手架:Vite vs Vue CLI怎么选?
前端·学习·架构·项目·vue3教程
kaixin_啊啊7 小时前
【零基础学AI】第 7 章——让 AI 辅助学习和办公
人工智能·学习