Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Dear PyGuiでフォントサイズを変更してみる

先日Dear PyGuiとMediaPipeを連携させてジャンケンゲームを作成しました。
elsammit-beginnerblg.hatenablog.com

こちらのアプリを作成していた時に以外に苦戦したことが記事中にも記載した通り、
Dear PyGuiでフォントサイズどうやって変えるのか?
といった課題?でした。

今回苦戦したので、以降は迷わないようにまとめておこうと思います。




■文字フォントを変更する方法その1

まず、

set_global_font_scale(font size)

APIを使用してフォントサイズを指定することにしてみました。
今回は、テキスト毎に変更するわけではないし、一括で変更すればいいか。
と思ったため採用した策でした。

まずはおためしで下記のようなコードを作成し実行!!

import dearpygui.dearpygui as dpg

dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()

dpg.set_global_font_scale(20)

with dpg.window(label="testWindow",pos=[10,10]):
    dpg.add_text("Hello World")

dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

結果は、、、
f:id:Elsammit:20220127230927p:plain

となってしまい、WIndowのフォントサイズまで大きくなってしまった。。
確かにglobalと記載されているので全体にかかるだろうと思っていましたが、、、
まさかwindowのタイトルとかまで大きくなってしまうとは。。

ついでに、

import dearpygui.dearpygui as dpg

dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()

with dpg.window(label="testWindow",pos=[10,10]):
 dpg.set_global_font_scale(20)
    dpg.add_text("Hello World")

dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

と記載しても結果は変わらず。。。

■文字フォントを変更する方法その2

その1では確かにフォントサイズ大きくなりましたが、、
流石にちょっと、、、
ということで別案を検討することに。

そこで、

dpg.add_font("フォント種類", フォントサイズ, tag=タグ名)

APIを発見。

早速使用してみることにしました。

では、その1で使用したコードを流用して試しに動かしてみます。
コードはこちら。

import dearpygui.dearpygui as dpg

dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()

with dpg.font_registry(show=False):
    dpg.add_font("./arial.ttf", 50, tag="HelloTag")

with dpg.window(label="testWindow",pos=[10,10]):
    dpg.add_text("Hello World")
    dpg.bind_item_font(dpg.last_item(), "HelloTag")

dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

add_fontですが、

with dpg.font_registry(show=False):
    dpg.add_font("./arial.ttf", 50, tag="ttf-font")

といったようにfont_registryであらかじめセットしておく必要があります。
さらに、add_fontで指定したタグ名とadd_textのタグ名を一致させるとエラーになってしまいます。

ここが一番自分が困った所でした。。
普通に考えて、add_fontで指定したタグ名と合わせればそのtextのフォントサイズが変わるでしょ。。
仕方ないので、直前の文字サイズを指定するための、

bind_item_font

を用いて、直前に定義したテキストのみのサイズを変更させる方法にたどり着きました。

こちらのコードを実行すると、
f:id:Elsammit:20220127232425p:plain
となり、定義したテキスト文章のみ文字サイズを大きくすることが出来ました。

■最後に

今回はDear PyGuiを利用する上で苦戦した文字サイズの変更についてまとめてみました。
次は何をしようかな??