Pygame詳解:font 模塊



pygame.font

Pygame 中加載和表示字體的模塊。
函數

1     pygame.font.init()  ——  初始化字體模塊
2     pygame.font.quit()  ——  還原字體模塊
3     pygame.font.get_init()  ——  檢查字體模塊是否被初始化
4     pygame.font.get_default_font()  ——  獲得默認字體的文件名
5     pygame.font.get_fonts()  ——  獲取所有可使用的字體
6     pygame.font.match_font()  ——  在系統中搜索一種特殊的字體
7     pygame.font.SysFont()  ——  從系統字體庫創建一個 Font 對象

1    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
方法 

 1    pygame.font.Font.render()  ——  在一個新 Surface 對象上繪制文本
 2     pygame.font.Font.size()  ——  確定多大的空間用於表示文本
 3     pygame.font.Font.set_underline()  ——  控制文本是否用下划線渲染
 4     pygame.font.Font.get_underline()  ——  檢查文本是否繪制下划線
 5     pygame.font.Font.set_bold()  ——  啟動粗體字渲染
 6     pygame.font.Font.get_bold()  ——  檢查文本是否使用粗體渲染
 7     pygame.font.Font.set_italic()  ——  啟動斜體字渲染
 8     pygame.font.Font.metrics()  ——  獲取字符串參數每個字符的參數
 9     pygame.font.Font.get_italic()  ——  檢查文本是否使用斜體渲染
10     pygame.font.Font.get_linesize()  ——  獲取字體文本的行高
11     pygame.font.Font.get_height()  ——  獲取字體的高度
12     pygame.font.Font.get_ascent()  ——  獲取字體頂端到基准線的距離
13     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

獲取字體底端到基准線的距離(以像素為單位)。
————————————————
版權聲明:本文為CSDN博主「來自江南的你」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41556318/article/details/86303502


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM