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