PyGame字体详解

文章目录

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

字体初始化

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

import pygame
from pygame import fontfont.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()breakscreen.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()breakscreen.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()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓开发显示加载中

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

从计算机底层深入Golang高并发

从计算机底层深入Golang高并发 1.源码流程架构图 2.源码解读 runtime/proc.go下的newpro() func newproc(fn *funcval) {//计算额外参数的地址argpgp : getg()pc : getcallerpc()//s1使用systemstack调用newproc1 systemstack(func() {newg : newproc1(fn, gp, pc)_p_ : getg…

Tekton 基于 cronjob 触发流水线

Tekton 基于 cronjob 触发流水线 Tekton EventListener 在8080端口监听事件,kubernetes 原生 cronjob 定时通过curl 命令向 EventListener 发送事件请求,触发tekton流水线执行,实现定时运行tekton pipeline任务。 前置要求: kub…

【Python】人工智能-机器学习——不调库手撕贝叶斯分类问题

1. 作业内容描述 1.1 背景 数据集大小150该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm)Sepal.Width:花萼宽度单位(cm)Petal.Length:花瓣长度(cm)Petal.Width:花瓣宽度(cm)category:类别&#xff0…

Axure的流程图/泳道图以及自定义元件库的使用

目录 1.ProcessOn的介绍 2.流程图以及泳道图的介绍 2.1流程图 2.2流程图的特点 2.3泳道图 2.4泳道图的特点 2.5流程图跟泳道图的优缺点 2.5.1优点: 2.5.2缺点: 2.6流程图的使用 2.7流程图的案列 2.8泳道图的使用 3.自定义元件库 4.门诊流程…

【Hadoop】执行start-dfs.sh启动hadoop集群时,datenode没有启动怎么办

执行start-dfs.sh后,datenode没有启动,很大一部分原因是因为在第一次格式化dfs后又重新执行了格式化命令(hdfs namenode -format),这时主节点namenode的clusterID会重新生成,而从节点datanode的clusterID 保持不变。 在…

Java 实现汉字转拼音带单调

代码 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourcefo…

华为战略管理的核心工具与方法论:五看三定之“三定”定什么

上一篇文章,华研荟介绍了华为在战略管理中使用的工具之一:五看三定中的五看含义和主要的一些工具(模型),今天继续为您介绍“三定”。 在“五看”中,最后一看是“看机会”,将我们面临的各种可能…

【视觉SLAM十四讲学习笔记】第四讲——李代数求导与扰动模型

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

什么是POM设计模式?

为什么要用POM设计模式 前期,我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本(以快递100网站登录举栗): import timefrom selenium import webdriver from selenium.webdriver.common.by import Bydriver …

9.2 Linux LED 驱动开发

一、Linux 下的 LED 驱动原理 Linux 下的任何驱动,最后都是要配置相应的硬件寄存器。 1. 地址映射 MMU 全称叫做 MemoryManage Unit,也就是内存管理单元。 现在的 Linux 支持无 MMU 处理器。MMU 主要完成的功能为: 1、完成虚拟空间到物理空间…

java-sec-code的xss

java-sec-code 用于学习java漏洞代码 环境部署 直接在idea中使用git 运行即可 RequestMapping("/reflect") ResponseBody public static String reflect(String xss) {return xss;}当用户访问到/reflect URL地址时,程序会自动调用reflect方法&#xff0c…

『踩坑记录』IDEA Spring initialzr新建Spring项目不能选择jdk8的解决方法

问题描述 Spring initializr新建Spring项目不能选低版本java 解决方法 默认官方start.spring.io已不支持自动生成低版本jkd的Spring项目,自定义用阿里云的starter即可 用阿里云的就能支持低版本jdk了 完 欢迎关注我的CSDN博客 :Ho1aAs 版权属于&a…

Tekton 基于 gitlab 触发流水线

Tekton 基于 gitlab 触发流水线 Tekton EventListener 在8080端口监听事件,Gitlab 提交代码产生push 事件,gitlab webhook触发tekton流水线执行。 前置要求: kubernetes集群中已部署 tekton pipeline、tekton triggers以及tekton dashboa…

SpringMVC的文件上传、多文件上传

概念:上传/下载应用 对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能。而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是…

【Spring】04 国际化

文章目录 1. 定义2. Spring 的支持1) MessageSource接口2) ResourceBundleMessageSource 3. 配置国际化1)配置MessageSource Bean2)创建资源文件3)在Bean中使用国际化消息 4. 使用占位符和参数结语 Spring 为我们提供了…

遇到运维故障,有没有排查和解决故障的正确流程?

稳定是偶然,异常才是常态,用来标注IT运维工作再适合不过。 因为对于IT运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步。 故障处理是最心跳的事情,没有…

XETUX软件 dynamiccontent.properties.xhtml RCE漏洞复现

0x01 产品简介 XETUX 是一个全面的解决方案,包括一套安全、强大和可监控的软件程序,专为自动控制餐厅和零售而设计和开发。 0x02 漏洞概述 XETUX 存在代码执行漏洞,攻击者可通过 dynamiccontent.properties.xhtml 执行任意代码获取服务器权限。 0x03 复现环境 FOFA:ti…

SQL进阶理论篇(四):索引的结构原理(B树与B+树)

文章目录 简介如何评价索引的数据结构设计好坏二叉树的局限性什么是B树什么是B树总结参考文献 简介 我们在上一节中说过,索引其实是一种数据结构,那它到底是一种什么样的数据结构呢?本节将简单介绍一下几个问题: 什么样的数据结…

<JavaEE> 网络编程 -- 网络通信基础(协议和协议分层、数据封装和分用)

目录 一、IP地址 1)IP地址的概念 2)IP地址的格式 二、端口号 1)端口号的概念 2)端口号的格式 3)什么是知名端口号? 三、协议 1)协议的概念 2)协议的作用 3)TC…