<2026-03-22 追記>
Pyxel 2.6版からtext()のフォント指定で,.ttfファイルも指定できるようになりました。
詳しくはサンプルプログラム 13_custom_font.py を参照してください。
Pyxel 日本語テキストの表示方法(2.2.1版からの機能)
Python向けレトロゲームエンジン Pyxel のバージョン2.2.1(2024-09-01リリース)で,pyxel.text() でビットマップフォントを指定できるようになりました。
日本語の文字を含むビットマップフォントを使用することで,ゲーム画面にかなや漢字を表示できます。
Windows環境でのPyxelのバージョンアップ
※Pyxelのバージョンが古い場合は,バージョンアップが必要です。
- Windowsのコマンドプロンプトを起動
<コマンドプロンプトの起動方法>
Windowsの検索ウィンドウ(スタートボタン横の虫眼鏡)にcmdを入力して,検索結果から「コマンドプロンプト」を選択
- コマンドプロンプトに「pip install -U pyxel」を入力
※-Uのオプション指定によりアップグレードされます
ビットマップフォントの準備
漢字などを表示するには,文字の画像データ「BDFファイル(ビットマップフォントのファイル)」が必要です。
任意のフォルダで「pyxel copy_examples」コマンドを実行してサンプルをコピーして,pyxel_examples\assetsフォルダ内の .bdf のファイルを自分のプログラムのフォルダにコピーします。
pyxel_examples フォルダ
13_bitmap_font.py ・・・使用例+文字縁取り処理
assets フォルダ
umplus_j10r.bdf ・・・10ドットのフォントファイル(Unicode)
umplus_j12r.bdf ・・・12ドットのフォントファイル(Unicode)
コードの例
umplus_j10r.bdf を Pythonのプログラムファイルと同じフォルダに配置した例です。
gamedev フォルダ ・・・ Pyxelのゲームを作るフォルダ(フォルダ名は例)
fonttest.py ・・・ Pythonのプログラムファイル(ファイル名は例)
umplus_j10r.bdf ・・・ ビットマップフォントのファイル
<fonttest.py のコードの内容>
import pyxel pyxel.init(128, 128) # ビットマップフォントの読み込み font = pyxel.Font("umplus_j10r.bdf") # フォントを指定してテキスト表示 pyxel.text(10,10,"日本語の表示",7,font) pyxel.show()
・pyxel.Font( filename )
ビットマップフォントのファイルパスを指定して,Fontクラスを作成します。
・pyxel.text( x, y, s, col, font )
引数の最後に,Fontクラスを格納した変数を指定します。
実行結果

文字列の表示サイズ取得
Fontクラスの text_width() を使うと,文字列表示時の横幅を取得できます。
import pyxel pyxel.init(128, 128) # ビットマップフォントの読み込み font = pyxel.Font("umplus_j10r.bdf") # 表示する文字列の横幅を取得 msg = "あいうえおabcdefg" w = font.text_width(msg) # 文字列の背面に矩形を表示 pyxel.rect(10,10,w,10,3) # フォントを指定してテキスト表示 pyxel.text(10,10,msg,7,font) pyxel.show()
・Fontクラス.text_width( s )
引数 s で指定した文字列の表示幅を返します。
実行結果

ゲームプログラムへの組み込み例
Fontクラスの作成(ビットマップフォントの読み込み)は初期処理で行います。
最初のPyxel紹介記事でのプログラムに,日本語表示を組み込むコードの例を示します。(コメントのある行が追加箇所)
import pyxel pyxel.init(80,64) pyxel.load("mygame.pyxres") font = pyxel.Font("umplus_j10r.bdf") # フォントの読み込みは初期処理で行う x = 0 y = 0 status = 0 def update(): global x,y,status x = pyxel.mouse_x y = pyxel.mouse_y if x == 5 and y == 5: status = 1 else: status = 0 return def draw(): pyxel.cls(1) pyxel.blt( 5,5, 0, 8,0, 8,8,11) pyxel.blt( x,y, 0, 8,0, 8,8, 0) if status == 1: pyxel.text(20,7,"Hello world!",7) pyxel.text(5,30,"日本語を表示!",10,font) # フォント指定のテキスト表示 return pyxel.run(update,draw)
実行結果

参考
公式サンプルへのリンク
複数のフォントファイル指定や,文字の縁取り処理の例など
https://github.com/kitao/pyxel/blob/main/python/pyxel/examples/13_bitmap_font.py
13_custom_font.py
Fontクラス
pyxel/python/pyxel/__init__.pyi at main · kitao/pyxel · GitHub
# Font class class Font: def __init__(filename: str) -> None: ... def text_width(s: str) -> None: ... : # Image class class Image: : def text( self, x: float, y: float, s: str, col: int, font: Optional[Font] ) -> None: ...
ビットマップフォント公開サイト
Little Limit
Little Limit さんのビットマップフォント(トップメニュー > font)
8×8ドット日本語フォント「美咲フォント」JIS 第一・第二水準をサポート
8×12ドット日本語フォント「k8x12」JIS 第一・第二水準をサポート
12×8ドット日本語フォント「k12x8」JIS 第一水準の文字とその他の記号
※ 各ページのダウンロードの「X11 BDF形式」のリンクから入手可
Unicode Font from /efont/
/efont/ The Electronic Font Open Laboratory. さんのUnicodeフォント
h10.bdf 半角英数字や記号など 2179文字でファイルサイズが244KB
h12.bdf 半角英数字や記号など 2120文字
b14.bdf 漢字含む 31971文字でファイルサイズが4.77MB
b16.bdf 漢字含む 24618文字
b24.bdf 漢字含む 30641文字