
前回のブログでPygameでダウンロードした外部フォントを使用する方法を紹介しました。
外部ファイルを使用とした際、失敗して外部ファイルを読み込めず、別の代替フォントを使用してしまい、日本語が四角で表示されてしまう状況に悩まされていました。フォントファイルの場所をしっかり指定しているのにもかからわず以下のような表示になりました。

ダウンロードした日本語が文字化けして四角で表示される😅
問題のコード
私が悩まされた問題はPygameにもフォントファイルにも問題は無く、私のコードがミスしていました。ミスしたコードがこちらです。
- import pygame
- WINDOW_WIDTH = 600
- WINDOW_HIGHT = 100
- FONT_PATH = "ipaexg.ttf"
- moji = "♪ みんなで歌おう ♪"
- pygame.init()
- text_font = pygame.font.SysFont (FONT_PATH, 50)
- screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HIGHT))
- screen.fill((255, 255, 255))
- text_r = text_font.render(moji, True, (255,255,255),(55,55,55))
- w,h = text_r.get_size()
- screen.blit(text_r, (WINDOW_WIDTH / 2 - w/2, WINDOW_HIGHT / 2 - h/2))
- pygame.display.flip()
- LOOP = True
- while LOOP:
- for event in pygame.event.get():
- if event.type == pygame.QUIT: LOOP = False
こちらのコードはミスがあるのですがエラーは発生しません。

先程の写真と同じ物ですが、実行すると日本語がすべて四角で表示されてしまいました。
今回の問題
今回は10行目の
text_font = pygame.font.SysFont (FONT_PATH, 50)
に問題がありました。
フォントの読み込みと文字描写を行う為のpygameモジュールであるpygame.fontには
システムフォントからフォントオブジェクトを生成するpygame.font.SysFontと
フォントファイルからフォントオブジェクトを生成するpygame.font.Fontがあったのです。
10行目の
pygame.font.SysFont (FONT_PATH, 50)
を
pygame.font.Font (FONT_PATH, 50)
に書き換えた所、

写真のようにダウンロードしたフォントファイルが利用出来るようになりました。
pygame.font.SysFontは第一引数に入力したフォントの条件に合わない場合はデフォルトのフォントが使用される為、エラーが出ずに実行できてしまったようです。
最終的なコード
前回のブログでも掲載しましたが、外部フォントを使用する為の最終的なプログラムは以下の通りになりました。
- import pygame
- WINDOW_WIDTH = 600
- WINDOW_HIGHT = 100
- FONT_PATH = "ipaexg.ttf"
- moji = "♪ みんなで歌おう ♪"
- pygame.init()
- text_font = pygame.font.Font (FONT_PATH, 50)
- screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HIGHT))
- screen.fill((255, 255, 255))
- text_r = text_font.render(moji, True, (255,255,255),(55,55,55))
- w,h = text_r.get_size()
- screen.blit(text_r, (WINDOW_WIDTH / 2 - w/2, WINDOW_HIGHT / 2 - h/2))
- pygame.display.flip()
- LOOP = True
- while LOOP:
- for event in pygame.event.get():
- if event.type == pygame.QUIT: LOOP = False
実行する前に6行目のFONT_PATH=””の中身をダウンロードしたフォントのファイル名(拡張子含む)に変更してください。
おわりに
Pythonのプログラムを実行していて、エラーが出た場合は何が悪いかエラー文に書いてある事がほとんどで、すぐにミスを見つけやすいです。
しかし、今回のようにエラーが出ない場合、何がミスっているか見つけにくく時間がかかってしまう事が多いですが意外と単純なミスであることが多いです。
これからも、プログラミングのブログ記事を作成するので
よろしければブログランキングボタンを押していただけると嬉しいです!
コメント