当前位置: 首页 > news >正文

【Python】【进阶篇】十、Pygame的Font文本和字体

目录

  • 十、Pygame的Font文本和字体
    • 10.1 `font.SysFont()`
    • 10.2 `font.Font()`
    • 10.3 字体对象方法

十、Pygame的Font文本和字体

Pygame 通过pygame.font模块来创建一个字体对象,从而实现绘制文本的目的。
该模块的常用方法如下所示:

名称说明
pygame.font.init()初始化字体模块
pygame.font.quit() 取消初始化字体模块
pygame.font.get_init() 检查字体模块是否被初始化,返回一个布尔值。
pygame.font.get_default_font() 获得默认字体的文件名。返回系统中字体的文件名
pygame.font.get_fonts() 获取所有可使用的字体,返回值是所有可用的字体列表
pygame.font.match_font() 从系统的字体库中匹配字体文件,返回值是完整的字体文件路径
pygame.font.SysFont() 从系统的字体库中创建一个 Font 对象
pygame.font.Font()从一个字体文件创建一个 Font 对象

Font 模块提供了两种创建字体(Font)对象的方法,分别是:

  • SysFont (从系统中加载字体文件创建字体对象)
  • Font (通过文件路径创建字体对象)

10.1 font.SysFont()

直接从系统中加载字体使用如下方法:

pygame.font.SysFont(name, size, bold=False, italic=False)

参数说明如下:

  • name : 列表参数值,表示要从系统中加载的字体名称,它会按照列表中的元素顺序依次搜索,如果系统中没有列表中的字体,将使用 Pygame 默认的字体。
  • size : 表示字体的大小;
  • bold : 字体是否加粗;
  • italic : 字体是否为斜体。

使用示例如下:

print("获取系统中所有可用字体",pygame.font.get_fonts())
my_font = pygame.font.SysFont(['方正粗黑宋简体','microsoftsansserif'],50)

上述方法将优先使用“方正粗黑宋简体”。

10.2 font.Font()

当我们想要在游戏中引入比较炫酷的字体,而系统中又不存在时,我们可以使用另外一种方法,从外部加载字体文件来绘制文本。其语法格式如下:

my_font = pygame.font.Font(filename, size) 

参数说明如下:

  • filename : 字符串格式,表示字体文件的所在路径;
  • size : 设置字体的大小。

使用示例如下:

f = pygame.font.Font('C:/Users/Administrator/Desktop/willhar_.ttf',50)

从桌面加载了一个字体文件来创建字体对象,并设置字体大小为 50。注意,上述字体文件是在网上下载的,您也可以任意下载点击网址前往),或者使用系统库中的字体文件。

10.3 字体对象方法

Pygame 为处理字体对象提供了一些常用方法,如下所示:

名称说明
pygame.font.Font.render() 该函数创建一个渲染了文本的 Surface 对象
pygame.font.Font.size() 该函数返回渲染文本所需的尺寸大小,返回值是一个一元组 (width,height)
pygame.font.Font.set_underline() 是否为文本内容绘制下划线
pygame.font.Font.get_underline() 检查文本是否绘制了下划线
pygame.font.Font.set_bold() 启动粗体字渲染
pygame.font.Font.get_bold() 检查文本是否使用粗体渲染
pygame.font.Font.set_italic() 启动斜体字渲染
pygame.font.Font.metrics() 获取字符串中每一个字符的详细参数
pygame.font.Font.get_italic() 检查文本是否使用斜体渲染
pygame.font.Font.get_linesize() 获取字体文本的行高
pygame.font.Font.get_height() 获取字体的高度
pygame.font.Font.get_ascent() 获取字体顶端到基准线的距离
pygame.font.Font.get_descent() 获取字体底端到基准线的距离

使用上述方法,我们可以非常方便地对字体进行渲染,或者获取字体的相关信息,比如字体的高度、是否是粗体、斜体等信息。

上述方法中使用最多要数第一个方法,它是绘制文本内容的关键方法,其语法格式如下:

render(text, antialias, color, background=None)

参数说明如下:

  • text : 要绘制的文本内容
  • antialias : 布尔值参数,是否是平滑字体(抗锯齿)。
  • color : 设置字体颜色;
  • background : 可选参数,默认为 None,该参数用来设置字体的背景颜色。

下面看一组简单的示例:

import sys
import pygame# 初始化
pygame.init()
screen = pygame.display.set_mode((600, 400))
# 填充主窗口的背景颜色
screen.fill((20, 90, 50))
# 设置窗口标题
pygame.display.set_caption('Python自学网')
# 字体文件路径 C:/Windows/Fonts/simhei.ttf
f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf', 50)
# render(text, antialias, color, background=None) -> Surface
text = f.render("网址:python.net", True, (255, 0, 0), (255, 255, 255))
# 获得显示对象的 rect区域大小
textRect = text.get_rect()
# 设置显示对象居中
textRect.center = (300, 200)
screen.blit(text, textRect)
while True:# 循环获取事件,监听事件for event in pygame.event.get():# 判断用户是否点了关闭按钮if event.type == pygame.QUIT:# 卸载所有pygame模块pygame.quit()# 终止程序sys.exit()pygame.display.flip()  # 更新屏幕内容

除了使用上述方法之外,Pygame 为了增强字体模块的功能,在新的版本中又加入了另外一个字体模块,它就是 Freetype 模块。该模块属于 Pygame 的高级模块, 它能够完全可以取代 Font 模块,并且在 Font 模块的基础上又添加了许多新功能,比如调整字符间距离,字体垂直模式以及逆时针旋转文本等(详情可阅读官方文档)。

如果想 Freetype 模块,必须使用以下方式导包:

import pygame.freetype

下面使用 Freetype 模块来绘制文本内容,代码如下:

import sys, pygame
import pygame.freetypepygame.init()
# 设置位置变量
pos = [180, 50]
# 设置颜色变量
GOLD = 255, 251, 0
BLACK = 0, 0, 0
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Python自学网")
f1 = pygame.freetype.Font("C:/Users/Administrator/Desktop/willhar_.ttf", 45)
# 注意,这里使用render_to() 来绘制文本内容,与render 相比,该方法无返回值
# 参数说明:
# pos 绘制文本开始的位置,fgcolor表示前景色,bgcolor表示背景色,rotation表示文本旋转的角度
freeRect = f1.render_to(screen, pos, "I love python.net", fgcolor=GOLD, bgcolor=BLACK, rotation=35)
while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()pygame.display.update()

相关文章:

【Python】【进阶篇】十、Pygame的Font文本和字体

目录十、Pygame的Font文本和字体10.1 font.SysFont()10.2 font.Font()10.3 字体对象方法十、Pygame的Font文本和字体 Pygame 通过pygame.font模块来创建一个字体对象,从而实现绘制文本的目的。 该模块的常用方法如下所示: 名称说明pygame.font.init()初…...

【从零开始学习 UVM】10.8、UVM TLM —— UVM TLM Example

文章目录 subComp1subComp2ComponentAsubComp3ComponentBTop Env/Test这个 UVM TLM 示例使用之前文章中讨论的 put 端口、TLM FIFO 和 get 端口来构建一个具有不同层次的 TLM 端口的测试台。 下面定义了一个名为Packet的类,作为从一个组件传输到另一个组件的数据项。这个类对象…...

获取自己所上传资源的下载量

import requestsurl = https://download-console-api.csdn.net/v1/user/sources/getUploadListByUserName?status=2&pageNum=1&pageSize=100 cookie = # 这里填自己的cookie header = {"authority": "download-console-api.csdn.net","met…...

Aspose.cells模板导出使用记录

简述 用Aspose.cells导出可以方便地将数据到Excel文档中,简单的直接将DataTable列表写入即可,复杂的格式一般会先做好模板,再将数据填充进去,这样可以保持设置好的样式,又能快速填充内容,十分方便。 智能…...

AcWing——糖果传递

有 n个小朋友坐成一圈,每人有 a[i]个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为 1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正整数 n,表示小朋友的个数。 接下来 n 行,每行一个整数 a[i]&…...

Redis中的单线程模型

文章目录 文件事件处理器模型Redis的客户端与服务端的交互过程图Redis基于Reactor模式开发了自己的网络事件处理器,称之为 文件事件处理器(File Event Hanlder)。 文件事件处理器由Socket、IO多路复用程序文件事件分派器(dispather)事件处理器(handler)文件事件处理器模型 IO…...

Python函数默认参数设置(超级详细)

我们知道,在调用函数时如果不指定某个参数,Python 解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给拥有默…...

人工智能如何赋能业务创新?安克创新有话要说

对于一家企业来说,应该如何运用人工智能技术助力业务创新?作为一家多年复合增长率超过35%的企业,安克创新对这个话题无疑有着深切的体验感悟。飞速成长的消费电子企业众所周知,当下各行各业都在如火如荼地开展人工智能应用&#x…...

如何学习与学习的本质

如何学习两种模式两种记忆方式拖延问题学习方法学习本质两种模式 专注模式发散模式 专注模式和发散模式可以进行切换,提高效率, 发散模式可以后台工作。 两种记忆方式 工作记忆(前额叶皮质)长时记忆(图像比较容易记…...

C++ deque容器

C deque容器 文章目录C deque容器前言1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque 插入和删除6. deque 数据存取7. deque 排序总结前言 本文包含deque容器基本概念、deque构造函数、deque赋值操作、deque大小操作、deque插入和删除、deque…...

HashMap的底层原理

hashmap是一个以key,value形式存储的集合,在JDK1.7中是以数组链表的数据结构,在JDK1.8中是数组链表红黑树的数据结构,他在对数据操作时继承了数组的线性查找和链表的寻址修改 hashmap是线程不安全的 : 在JDK1.7中会造成环形链和数据丢失的情况 在JDK1.8中hashmap的put过程会造…...

Django 4.0文档学习(四)

上篇文章 Django 4.0文档学习(四) 文章目录编写你的第一个 Django 应用,第 6 部分自定义应用的界面和风格编写你的第一个 Django 应用,第 7 部分自定义后台表单自定义后台更改列表自定义后台界面和风格自定义后台主页编写你的第一…...

2023年全国最新高校辅导员精选真题及答案38

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 112.为改变重知识传授轻能力培养的大学课堂,教学方法可以采用(&am…...

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味,晴空万里!和ChatGPT-4开始了一场坦诚的沟通,它全程都表现出高情商,以及不断尽量安抚我的情绪,而这,恰恰令我脊背发凉。 部分文字截取 ZM:我能不能理解每次对话就是一次你的“生命” G&…...

RocketMQ 5.1 NameServer 启动流程

文章目录1 解析命令行参数和配置文件2 创建并启动 NamesrvController2.1 创建 NamesrvController 对象2.2 启动 NamesrvController 对象第一步:初始化 controller第二步:注册 JVM 钩子第二步:启动 controllerRocketMQ是一个分布式消息中间件&…...

马云回国,首谈ChatGPT

马云今天回国了,这是一个备受关注的消息。 作为中国最具代表性的企业家之一,马云在过去的二十多年里,带领阿里巴巴从一个小小的创业公司,发展成为全球最大的电商平台之一,同时也推动了中国互联网行业的发展。 他的回…...

深入理解C++迭代器:让你的C++代码更加灵活

C迭代器:更加优雅的容器操作方式引言C迭代器简介a. 迭代器的定义b. 迭代器的作用c. 迭代器与指针的区别迭代器分类a. 输入迭代器(Input Iterator)b. 输出迭代器(Output Iterator)c. 前向迭代器(Forward Ite…...

Java 读取Excel模板中的数据到实体类

目录一. 前提条件1.1 需求1.2 分析二. 准备2.1 自定义注解2.2 封装Excel的实体类三. 前台四. Controller层五. Service层💪💪💪六. 效果一. 前提条件 1.1 需求 从指定的Excel模板中读取数据,将读取到的数据存储到数据库中。 1.2…...

【java基础】Socket网络编程

文章目录说明InetAddress介绍Socket介绍ServerSocket介绍实现简单的Socket通信总结说明 这里介绍下如何在java里面进行socket编程 InetAddress介绍 这个类表示一个Internet协议(IP)地址,我们可以通过ip或者主机名来构建这个类 Testpublic void t1() throws Except…...

转发和重定向区别

转发和重定向 1.0 面试提问 定义不同跳转的方式不同数据共享不同最终的URL地址不同代码实现不同 1. 转发 1.1 概念 转发实际上在服务器端进行页面的跳转操作,请求转发:一种在服务器内部的资源的跳转的方式。 访问A,A请求转发了B&#xff0c…...

java面试题(持续更新)

java面试题(持续更新) java 基础 java面向对象有哪些特征 面向对象的三大特征:封装、继承、多态 封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,…...

【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议

人工智能(AI)是当今科技领域最热门和最有前景的话题之一,它已经渗透到了我们生活和工作的方方面面,给我们带来了许多便利和惊喜。而在AI的众多分支中,自然语言处理(NLP)是最贴近人类的一个领域&…...

实战打靶集锦-013-Loly

**写在前面:**记录博主的一次打靶经历 目录1. 主机发现2. 端口扫描3. 服务枚举4. web服务探查4.1 WordPress探测4.2 使用metasploit4.3 使用wpscan4.4 阶段性回顾5. 提权5.1 弱密码提权5.2 操作系统信息枚举5.3 定时任务枚举5.4 passwd信息枚举5.5 可执行文件枚举5.…...

程序员OKR学习法

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl OKR管理法 OKR(Objectives and Key Results)管理法是一种目标管理方法,旨在通过制定明确的目标和可量化的关键结果来帮助组织、团队和个人…...

【从零开始学习 UVM】6.6、UVM 激励产生 —— UVM Virtual Sequence【重要】

文章目录 使用virtual sequencer不使用virtual sequencervirtual sequence是一个容器,用于在环境中的virtual sequencer上启动多个sequence。 这个virtual sequence通常由一个具有对真实sequencers句柄的virtual sequencers执行。 需要virtual sequence的原因是当您需要在不…...

蓝桥杯:阶乘约数

蓝桥杯:阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题:答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有…...

最大数字

[蓝桥杯 2022 国 B] 最大数字 题目描述 给定一个正整数 NNN。你可以对 NNN 的任意一位数字执行任意次以下 2 种操作: 将该位数字加 111。如果该位数字已经是 999,加 111 之后变成 000。 将该位数字减 111。如果该位数字已经是 000,减 111 之后变成 99…...

【java进阶08:异常】finally关键字、自定义异常类、用户业务作业、军队武器作业

java中的异常处理机制 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?我们可以使用UML图来描述以下继承结构 画UML图的工具:Rational Rose、starUML等 Object下有Throwable(可抛出的) Throwable下有两…...

#课程笔记# 电路与电子技术基础 课堂笔记 第6章 半导体器件的基本特性

6.1 半导体基础知识 6.1.1 本征半导体 完全纯净的、结构完整的半导体称为本征半导体。 常用的半导体材料有硅和锗,它们都是四价元素,原子最外层轨道有四个价电子。 若将纯净的半导体制成晶体,则原子形成排列整齐的点阵。 点阵是由共价键提供…...

skimage.filters.apply_hysteresis_threshold详解

本文内容均参考scipy1.9.1scipy1.9.1scipy1.9.1版本的源码,若有任何不当欢迎指出 我们截取官方注释如下: def apply_hysteresis_threshold(image, low, high):"""Apply hysteresis thresholding to image.This algorithm finds regions …...