[TOC]
# **pygame.font**
Pygame 中加載和表示字體的模塊。
## **函數**
* 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 對象
字體模塊可以在一個新的 Surface 對象上表示 TrueType 字體。它接受所有 UCS-2 字符(’u0001’ 到 ‘uFFFF’)。此模塊為可選擇模塊,并且依賴于 SDL\_ttf。在使用之前,你需要先測試該模塊是否可用,而且對其進行初始化。
通過使用現有的 Font 對象,可以完成大多數與字體有關的工作。Pygame.font 模塊自身僅可以完成常規的初始化以及通過 pygame.font.Font() 創建 Font 對象。
你可以通過使用 pygame.font.SysFont() 函數從系統內加載字體。另外還有其他幾個函數可以幫助你搜索系統的字體。
Pygame 配備了內建的默認字體。通過傳遞 “None” 為文件名訪問此字體。
在 pygame 第一次導入之前,當pygame.font 模塊確定環境變量 PYGAME\_FREETYPE 時使用基于 pygame.ftfont 的 pygame.freetype 模塊。 Pygame.ftfont 是一個pygame.font 可兼容模塊,兼容絕大部分,除開其中某個字體模塊單元測試:Pygame.ftfont 并沒有基于字體模塊的 SDL\_ttf 的 UCS-2 字符限制,所以對于大于 ‘uFFFF’ 的碼點會產生異常。如果 pygame.freetype 是不可使用的,那么 SDL\_ttf 字體模塊將會被加載用于替代。
## **函數詳解**
### **pygame.font.init()**
初始化字體模塊。
init() -> None
在調用 pygame.init() 時,該函數會被自動調用。
該函數用于初始化字體模塊。在使用其他任何函數前,該模塊必須被初始化。
多次調用該函數是安全的。
### **pygame.font.quit()**
還原字體模塊。
quit() -> None
手動還原 SDL\_ttf 的字體系統。該函數會被 pygame.quit() 自動調用。
即使模塊沒有被初始化,調用該函數也是安全的。
### **pygame.font.get\_init()**
檢查字體模塊是否被初始化。
get\_init() -> bool
如果該字體模塊已經初始化,返回 True,否則返回 False。
### **pygame.font.get\_default\_font()**
獲得默認字體的文件名。
get\_default\_font() -> string
返回系統字體的文件名。
注意,并不是字體文件的完整路徑。
這個文件通常與字體模塊處于同一文件目錄下,但是它也可以在程序附隨的獨立文檔中。
### **pygame.font.get\_fonts()**
獲取所有可使用的字體。
get\_fonts() -> list of strings
返回系統可使用的字體列表。
字體名將會被設置成小寫、所有的空格和標點符號也會將被刪除。
該函數在大多數系統內是有效的,但是一些系統如果沒有找到字體庫會返回一個空的列表。
### **pygame.font.match\_font()**
在系統中搜索一種特殊的字體。
match\_font(name, bold=False, italic=False) -> path
返回字體文件在系統中的完整路徑。
如果你要搜索的字體是粗體或者斜體的,則要把 bold 參數和 italic 參數設置成 True,該函數將會嘗試去搜索一個正確的字體族。
嘗試搜索的 name 參數可以是一個用逗號隔開的列表。如果根據提供的名字沒有找到任何東西,則返回 None 。
例子:
~~~
print pygame.font.match_font('bitstreamverasans')
# output is: /usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf
# (but only if you have Vera on your system)
~~~
**pygame.font.SysFont()**
從系統字體庫創建一個 Font 對象。
SysFont(name, size, bold=False, italic=False) -> Font
從系統字體庫中加載并返回一個新的字體對象。
該字體將會匹配 bold(加粗)和 italic(斜體)參數的要求。
如果找不到一個合適的系統字體,該函數將會回退并加載默認的 pygame 字體。
嘗試搜索的 name 參數可以是一個用逗號隔開的列表。
## **類 class pygame.font.Font**
從一個字體文件創建一個 Font 對象。
Font(filename, size) -> Font
Font(object, size) -> Font
## **方法**
* pygame.font.Font.render() —— 在一個新 Surface 對象上繪制文本
* pygame.font.Font.size() —— 確定多大的空間用于表示文本
* 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() —— 獲取字體底端到基準線的距離
根據提供的文件名或者 python 文件對象加載一個新的字體。字體的高度是以像素為單位。如果文件名是 “None”,則加載 Pygame 的默認字體。如果一個字體無法由給定的參數加載,將會產生一個異常。一旦字體已經創建完畢,那么字體的尺寸將不能修改。
字體對象主要被用于在新 Surface 對象中渲染文本。文本可以渲染為仿真的粗體或者斜體特征,但最好是加載的字體本身就帶有粗體或者斜體字形。可以用普通字符串或者 Unicode 編碼字符來渲染文本。
## **方法詳解**
### **pygame.font.Font.render()**
在一個新 Surface 對象上繪制文本。
render(text, antialias, color, background=None) -> Surface
該函數創建一個新的 Surface 對象,并在上邊渲染指定的文本。Pygame 沒有提供直接的方式在一個現有的 Surface 對象上繪制文本,取而代之的方法是:使用 Font.render() 函數創建一個渲染了文本的圖像(Surface 對象),然后將這個圖像繪制到目標 Surface 對象上。
僅支持渲染一行文本:“換行”字符不會被渲染。空字符(’x00’)被渲染將產生一個 TypeError 錯誤。Unicode 和 char(字節)字符串都可以被接受。對于 Unicode 字符串,僅 UCS-2 字符范圍(’u0001’ 到 ‘uFFFF’)被認為是有效的。任何編碼值更大字符的字符會產生一個 UnicodeError 的錯誤;對于 char 字符串,默認的是使用 LATIN1 編碼。color 參數決定的是文本的顏色(例如:(0, 0, 255) 表示藍色)。可選參數 background 決定了文本的背景顏色。如果沒有傳遞 background 參數,則對應區域內表示的文本背景將會被設置為透明。
返回的 Surface 對象將保持表示文本所需要的尺寸(與 Font.size() 所返回的尺寸相同)。如果將一個空字符串渲染為文本,將會返回一個空白 Surface 對象,它僅有一個像素點的寬度,但高度與字體高度一樣。
由于取決于文本背景的類型和抗鋸齒功能的使用,該函數將會返回不同類型的 Surface 對象。出于性能上的考慮,了解何種類型的圖像會被使用是很有幫助的:如果抗鋸齒功能沒有被使用,返回的圖像將采用二元調色的 8 位圖像。此時如果背景是透明的,只設置一個 colorkey 來實現;抗鋸齒圖像會被渲染為 24 位 RGB 圖像。此時如果背景是透明的,每個像素都將包含一個 alpha 通道。
優化:如果你已知文本最終將繪制在一個純色的背景上,那么文本是抗鋸齒的,你可以通過指定文本的背景色來提高性能(將文本背景色設置目標 Surface 對象的顏色)。使用這個技巧,你只需用一個 colorkey 即可保持透明信息,而不需要設置每個像素的 alpha 通道值(這樣效率會低很多)。
如果你嘗試渲染 ‘\\n’,通常是顯示為一個矩形(未知字符)。因此,你需要自己想辦法處理換行。
字體渲染并不是線程安全的行為:在任何時候僅有一個線程可以渲染文本。
### **pygame.font.Font.size()**
確定多大的空間用于表示文本。
size(text) -> (width, height)
該函數返回渲染文本所需要的尺寸。這可以被用于在文本顯示之前,確定文本的顯示位置。當然也有助于實現自動換行和其他布局效果。
注意:大多數字體使用字距調整來調整指定字母間的寬度。例如,”ae” 的寬度并不總是等同于 ‘a’ + ‘e’ 的寬度。
### **pygame.font.Font.set\_underline()**
控制文本是否用下劃線渲染。
set\_underline(bool) -> None
啟用后,所有字體的渲染都會包含下劃線。下劃線一般是和一個像素點一樣細,與字體尺寸無關。
該函數可以與粗體和斜體模式混合使用。
### **pygame.font.Font.get\_underline()**
檢查文本是否繪制下劃線。
get\_underline() -> bool
如果字體下劃線被啟用,返回 True。
pygame.font.Font.set\_bold()
啟動粗體字渲染。
set\_bold(bool) -> None
該函數啟用文本的粗體渲染。該函數是通過虛擬拉伸實現加粗,對大多數字體格式來說并不是很好看。如果可能,請加載真粗體格式的字體文件。當渲染的字體為粗體時,該字體將比普通模式下更寬一些。
該函數可以和斜體及下劃線模式混合使用。
### **pygame.font.Font.get\_bold()**
檢查文本是否使用粗體渲染。
get\_bold() -> bool
如果字體的粗體渲染模式被啟用,返回 True。
### **pygame.font.Font.set\_italic()**
啟動斜體字渲染。
set\_italic(bool) -> None
該函數啟用文本的斜體渲染。該函數是通過虛擬傾斜字體實現斜體,對大多數字體格式來說并不是很好看。如果可能,請加載真斜體格式的字體文件。當渲染的字體為斜體時,該字體將比普通模式下更寬一些。
該函數可以和粗體及下劃線模式混合使用。
### **pygame.font.Font.metrics()**
獲取字符串參數每個字符的參數。
metrics(text) -> list
返回一個列表,包含每個字符的屬性元組。形式如:\[(minx, maxx, miny, maxy, advance), (minx, maxx, miny, maxy, advance), …\]
元組內各個元素的含義如下圖:

列表內不可識別的字符對應的元組內參數均為 None。
### **pygame.font.Font.get\_italic()**
檢查文本是否使用斜體渲染。
get\_italic() -> bool
如果字體的斜體渲染模式被啟用,返回 True。
### **pygame.font.Font.get\_linesize()**
獲取字體文本的行高。
get\_linesize() -> int
返回該字體下文本的單行的高度(以像素為單位)。
當需要渲染很多行文本時,推薦使用該返回值作為行間距。
### **pygame.font.Font.get\_height()**
獲取字體的高度。
get\_height() -> int
返回實際渲染的文本的高度(以像素為單位)。
返回值是字體內每個字符的平均規格。
### **pygame.font.Font.get\_ascent()**
獲取字體頂端到基準線的距離。
get\_ascent() -> int
獲取字體頂端到基準線的距離(以像素為單位)。
以防大家腦補錯方向,補充下圖:

### **pygame.font.Font.get\_descent()**
獲取字體底端到基準線的距離。
get\_descent() -> int
獲取字體底端到基準線的距離(以像素為單位)。
- 一、Python基礎
- 1. 序言
- 1.1 Python簡介
- 1.2 安裝和使用IDE
- 1.3 語言特性和基礎概念
- 2. 基本數據類型
- 2.2 字符串型
- 2.2.2 ASCII簡介
- 2.2.4 字符串常用函數
- 3. 條件分支
- 3.3 閑聊條件判斷和運算符優先級
- 10.正則表達式
- 【降龍十八章】Python小技巧
- 18.1 學習網址
- 18.2 PIP切換源
- 18.3 使用whl來安裝
- 【工具優化】IDE優化技巧
- Anaconda
- Jupyter Notebook 的 Markdown 添加大綱
- Jupyter Notebook中圖片縮放和居左
- Anaconda設置環境變量
- Pycharm
- PyCharm新建文檔配置
- 設置字體和字號
- 設置主題和字體配色
- 保存和導入配置
- 設置對選擇內容自動添加引號
- 推薦安裝的插件
- Markdown
- 表格格式
- 二、Python進階
- copy和deepcopy
- 《零基礎入門學習 Python 》【小甲魚版】
- 001.和Python的第一次接觸+習題復習
- 002.用Python設計的第一個游戲 +習題復習
- Pygame詳解
- Pygame詳解:前言
- Pygame詳解(一):Color類
- Pygame詳解(二):display 模塊
- Pygame詳解(三):draw 模塊
- Pygame詳解(四):event 模塊
- Pygame詳解(五):font 模塊
- Pygame詳解(六):image 模塊
- Pygame詳解(七):key 模塊
- Pygame詳解(八):locals 模塊
- Pygame詳解(九):mixer 模塊
- Pygame詳解(十):mouse 模塊
- Pygame詳解(十一):Rect 對象
- Pygame詳解(十二):Surface 對象
- Pygame詳解(十三):time 模塊
- Pygame詳解(十四):music 模塊
- Pygame詳解(十五):pygame 模塊
- Pygame詳解(十六):cursors 模塊
- Pygame詳解(十七):joystick 模塊
- Pygame詳解(十八):mask 模塊
- Pygame詳解(二十一):BufferProxy 對象
- Pygame詳解(二十三):gfxdraw 模塊
- Pygame詳解(二十五):Overlay 對象
- Pygame詳解(二十八):sndarray 模塊
- Pygame詳解(三十一):camera 模塊
- Pygame詳解(三十二):cdrom 模塊
- Pygame詳解(三十六):version 模塊
- pygame rect相關知識
- Tkinter詳解
- Tkinter 組件詳解(一):Label
- Tkinter 組件詳解(二):Button