先日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()
結果は、、、
となってしまい、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
を用いて、直前に定義したテキストのみのサイズを変更させる方法にたどり着きました。
こちらのコードを実行すると、
となり、定義したテキスト文章のみ文字サイズを大きくすることが出来ました。
■最後に
今回はDear PyGuiを利用する上で苦戦した文字サイズの変更についてまとめてみました。
次は何をしようかな??