PyGame字体详解

文章目录

    • 字体初始化
    • 获取字体
    • 字体对象
    • 内置方法

字体初始化

在pygame程序中,第一步势必进行初始化,即调用pygame.init()函数,而此初始化过程,则顺便包含了字体初始化,即默不作声地调用了pygame.font.init()函数。下面通过pygame.font中的get_init()函数进行查询,结果如下

import pygame
from pygame import font

font.get_init()      # False
pygame.init()
font.get_init()      # True
font.quit()
font.get_init()      # False

其中quit用于取消字体的初始化。

获取字体

pygame可以很方便地判断当前字体,并且能够获取系统字体,示例如下

font.get_default_font() # 'freesansbold.ttf'
lst = font.get_fonts()
print(lst[:5])
# ['arial', 'arialblack', 'bahnschrift', 'calibri', 'cambria']
font.match_font('arial')
#'C:\\WINDOWS\\Fonts\\ARIALN.TTF'

其中,

  • get_default_font() 获取默认字体
  • get_fonts() 获取系统所有的字体列表
  • font.match_font(‘arial’) 获取系统中名为arial的字体的路径

字体对象

pygame中封装了字体类,在实例化过程中,一般需要两个参数,分别是字体路径以及文字尺寸。在初始化字体后,可通过render来渲染具体的文字。

path = 'C:\\WINDOWS\\Fonts\\ARIALN.TTF'
font.init()
f = font.Font(path, 50)
msg = f.render("FONT", True, (255, 255,255))

其中,render函数的参数如下

  • text 将要展示的文字
  • antialias 是否开启抗锯齿
  • color 颜色,(255,255,255)表示纯白

在设置好字体后,接下来便可在主循环中展示

pygame.init()
screen = pygame.display.set_mode((400, 200))
while True:
    if pygame.QUIT in [e.type for e in pygame.event.get()]:
        pygame.quit()
        break
    screen.fill((0,0,0))
    screen.blit(msg, (150, 60))
    pygame.display.flip()

效果如下

在这里插入图片描述

内置方法

上面的FONT其实并不协调,主要是尺寸与窗口并不匹配,从而无法做到居中,为此可通过size函数获取文字所占据的像素尺寸。

# 由于上面的代码段执行了pygame.quit(),所以需要重新初始化
pygame.init()
f = font.Font(path, 50)
f.size("FONT")  # (112, 58)
screen = pygame.display.set_mode((200, 100))
while True:
    if pygame.QUIT in [e.type for e in pygame.event.get()]:
        pygame.quit()
        break
    screen.fill((0,0,0))
    screen.blit(msg, (44, 21))
    pygame.display.flip()

效果如下

在这里插入图片描述

如果想获得每个文字的尺寸,则可使用metrics(text)方法,其返回值是一个列表,每个元素都代表text中的一个文字尺寸,格式为(minx, maxx, miny, maxy, advance),前四项比较好理解,advance表示前进偏移量。

另有一些获取文字尺寸的函数如下

  • get_linesize() 获取字体文本的行间距
  • get_height() 获取字体的高度
  • get_ascent() 获取字体的上升高度,即从字体基线到字体顶部的像素数。
  • get_descent() 获取字体的下降高度,即从字体基线到字体底部的像素数。

Font类中还内置了一些方法,用于设置或获取字体格式,这些方法一般由set和get成对出现

功能说明setget
下划线set_underline(b)get_underline()
粗体set_bold(b)get_bold()
斜体set_italic()get_italic()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246370.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeModbus--学习函数指针

目录 函数指针 最简单的例子 稍作修改例子 引入协议栈的函数指针 引入协议栈第二处函数指针 函数指针 该协议栈中使用到函数指针,现开展一篇专门存放函数指针的文章。 C语言的函数指针是指向函数的指针变量,可以用来存储和调用函数的地址。在C语言中…

【亲测】获取百度智能云access_token并存储,百度智能云access_token有效期

百度智能云服务内置很多api接口(文字识别,企业信息识别,等),所有百度智能云自带的接口都会用到百度的access_token 第一步:登录百度智能云管理中心 第二步:创建账户,完整身份认证 …

智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌燕鸥算法4.实验参数设定5.算法结果6.参考文…

jmeter判断’响应断言‘两个变量对象是否相等

1、首先需要设置变量,json、正则、csv文件等变量 2、然后在响应断言中 ①JMeter Variable Name to use —— 输入一个变量,变量名即可 ② 模式匹配规则 ——相等 ③测试模式 ——输入引用的变量命${变量名} (注意这里是需要添加一个测试模式…

安卓开发显示加载中

private ProgressDialog loadobj; // 显示 ProgressDialog loadobj loadobj.show(MainActivity.this, "正在加载", "请稍后..."); // 取消 ProgressDialog loadobj.dismiss();或者 public ProgressDialog progressDialog;public void loading(){// …

流场寻路(Flow Field Path Finding)

简介 当场景中有成千上万个寻路游戏单位需要到达同一目标点时,通过常用的A*算法进行寻路不再是合适的选择,因为每个寻路游戏单位都需要依据自身所在的位置,根据算法获得一条从自身位置寻路到目标点的路径,n个游戏单位进行寻路就需…

人工智能在大型复杂机械产品装配状态检测自动化中的应用

尊敬的读者们,本文主要围绕“大型复杂机械产品装配状态检测自动化方案”开展讨论,从这个领域存在的问题和难度,以及基于人工智能、数字图像处理、机器人控制、装配机理等技术的自动化设计与实践方案。文章提出了数字化建模和智能识别模型构建…

[Springboot 源码系列] 浅析自动配置原理

文章目录 自动配置类原理AopAutoConfigurartion条件装配的底层原理ConditionalConditionalOnXxx 自动配置类原理 public class AutoConfApplication {public static void main(String[] args) {GenericApplicationContext context new GenericApplicationContext();context.re…

Git命令之本地分支与远程分支支关联/解除关联

目录 1.应用场景2.关联远程仓库中存在的分支3.解除本地分支与远程分支的关联 1.应用场景 在实际的工作生活中,往往需要将本地的分支和远程分支关联,这样我们就可以使用git pull命令来更新拉取最新的代码,并使用git push命令将自己本地的修改…

设备远程监控系统:实时对工厂设备状态进行监控

随着工业4.0时代的到来,工业物联网平台在工业领域的应用越来越广泛。设备远程监控系统作为工业物联网的重要组成部分,能够实时对工厂设备状态进行监控,提高生产效率和管理水平。本文将详细介绍工厂设备数据的采集方式以及设备远程监控系统的应…

企业寄件运费贵?企业如何将企业快递费用降至最低?

按照上述情况,如果使用闪侠惠递商家寄件服务,相较于原本的费用,会节省很大一部分的成本费用的,显而易见,这是非常便宜的。 闪侠惠递的寄件服务支持圆通、德邦、京东、顺丰等多家主流快递公司,并可以对比多…

Git-瑞吉外卖

什么是GIt? 分布式版本控制工具,用来管理源代码文件。分布式主要体现在两种仓库(本地仓库、远程仓库)。 git的作用? 代码回溯、版本切换(切换不同框架)、多人协作、远程备份 基本命令&…

虚拟化逻辑架构:KVM虚拟机通过OVS端口组实现网络连接

目录 一、实验 1.CentOS 7 安装 OpenVSwitch(构建RPM安装包) 2.KVM虚拟机通过OVS端口组实现网络连接 二、问题 1.安装openvswitch-2.5.10报错 2.virt-install未找到命令 3.如何删除自定义网络 4.开机如何自动启动自定义网络 一、实验 1.CentOS 7 安装 Open…

双指针算法(一)

目录 移动零 复写零 快乐数 盛水最多的容器 双指针与单调性结合 有效三角形的个数 查找总价格为目标值的两个商品 两数之和 Ⅱ - 输入有序数组 双指针算法是通过定义两个指针不断单向移动来解决问题的一种算法。但双指针算法,是一个抽象的思想概念&#xf…

【C语言】超详解strncpystrncatstrncmpstrerrorperror的使⽤和模拟实现

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

智能优化算法应用:基于原子搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于原子搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于原子搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子搜索算法4.实验参数设定5.算法结果6.…

12.4~12.14概率论复习与相应理解(学习、复习、备考概率论,这一篇就够了)

未分配的题目 概率计算(一些转换公式与全概率公式)与实际概率 ,贝叶斯 一些转换公式 相关性质计算 常规,公式的COV与P 复习相关公式 计算出新表达式的均值,方差,再套正态分布的公式 COV的运算性质 如…

FastAPI访问/docs接口文档显示空白、js/css无法加载

如图: 原因是FastAPI的接口文档默认使用https://cdn.jsdelivr.net/npm/swagger-ui-dist5.9.0/swagger-ui.css 和https://cdn.jsdelivr.net/npm/swagger-ui-dist5.9.0/swagger-ui-bundle.js 来渲染页面,而这两个URL是外网的CDN,在国内响应超…

五、Java核心数组篇

1.数组 概念: ​ 指的是一种容器,可以同来存储同种数据类型的多个值。 ​ 但是数组容器在存储数据的时候,需要结合隐式转换考虑。 比如: ​ 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的&…

【RocketMQ】顺序消费消息实现原理分析

一、顺序消息概述 1.1、什么是顺序消息 顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。 1.2、顺序消息的类型 全局顺序消息 …