IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第21回 tkinterでフォントと文字サイズ、色を変更する方法 (菱沼佑香) 2021年7月

こんにちは、吉政創成 菱沼です。

今回も「いちばんやさしいPython入門教室(大澤 文孝氏著) 」を片手に勉強していきます。

さて、ヒット&ブローのプログラムが完成したため、画面作りに入りました。画面作りにはtkinterというPythonの標準GUIツールキットを使用していきます。

前回はテキスト入力エリアとボタンといったウィジェットを配置する方法として、[pack]、[grid]、[place]の3つを学習しました。

今回はフォントと文字サイズ、色の変更について学習します。

まずは前回までのおさらい

前回、packやgridについても学習していますが、テキスト的にはplaceを使っています。

いま出来上がっている画面はこんな感じ。

fig01

[place]の場合、ウィジェットの配置は座標(横軸がx、縦軸がy)で指定されますので、配置決めまでがちょっと面倒ですが、細かく指定したい場合にはちょうど良く配置できます。

最終的に完成するのは上の画面の横にユーザーが入力した履歴と、その履歴に対してヒットとブローの数を表示する画面がくっついてきます。

[grid]と[pack]について振り返りたい方は前回のコラムをご参照下さい。

オプションを使って、フォントと文字サイズを指定してみる

さて、上の画像では特にフォントや文字サイズを指定していません。指定する方法はどうやっていけばいいのでしょうか。

引用-----

P.164

やり方は、Labelメソッドの一番後ろに「font =(”フォント名”,フォントサイズ)」という引数を追加します。例えば、次のようにします。

>>> label1 = tk.Label(root, text=”数を入力してね”, font=(“Helvetica”,14))

この例だと「Helvetica」というフォントで、「14ポイント」というサイズを指定したことになります。

(中略)

指定できるフォントは、標準では次の3種類です。

・Times(明朝体っぽいもの)

・Helvetica(ゴシック体っぽいもの)

・Courier(等幅のタイプライタのようなもの)

これ以外に、「MSゴシック」などパソコンにインストールされているフォントを指定することもできます。

フォント名は大文字、小文字、全角、半角、空白の有無などを区別するので注意してください。

-----

ということで、まずサンプルコードを実行してみました。

fig02

確かに文字が大きくなってフォントも変わっていますね。

ちなみに斜体や取消線などのオプションを使えるそうです。

<使えるオプション>

各項目で指定できるのは次の表になります。

オプション

指定できる内容

family

フォント名(大文字、小文字、スペースなどは相違なく指定)

size

文字サイズ(値で指定)

weight

太 字: “bold”

slant

斜 体: “italic”

underline

下 線: “underline”

overstrike

取消線: “overstrike”

※「””」で囲まないとエラーになるので、囲むのを忘れないようにしましょう。

<指定する方法>

上の表に書いた各オプションを設定する方法は次の通りです。

例:tk.Lavel(root,text=”テキスト”, font=(“family”,size,weight,slant,under,overstrike))

フォント名以外は必須ではないので省略できます(通常のままでよく、省略しないのなら”normal”と書きます)。ただ、順番が違う(sizeの前にunderlineを配置するとか)とエラーになりました。

せっかくなので、フォント違いの文字と、オプションを使った場合をラベルで試して並べてみました。それが次の画像。文字サイズはすべて10にしています。

fig03

tkinter.font.Fontを使って、フォントを一括で指定する

上のように各ウィジェットの設定内でオプションを使えば、それぞれを違うフォントで表現できますが、実際のところ、各ウィジェットで変える必要がないのがほとんどだと思います。一括で設定するには次のように書いてあげればいいそうです。

>>> import tkinter.font

>>> font = tkinter.font.Font

tkinter.fontをインポートしてあげた後、tkinter.font.Fontを使って、一括で指定したいフォントの情報を書くということになります。(詳しい書き方のイメージは後であげる図をご確認下さい。)

また、オプションで書いた時と同様、下線や取消線、太字、斜体なども指定することが可能です。

が、書き方が変わるようです。

項目

オプションで書く場合

tkinter.font.Fontで書く場合

フォント指定

“フォント名”

family =”フォント名”

文字サイズ

size = 値

太字

“bold”

weight = “bold”

斜体

“italic”

slant  = “italic”

下線

“underline”

underline = True

取消線

“overstrike”

overstrike = 1

というわけで、上で作ったものを変えてみました。赤線を引いた部分が変更した部分です。

ここではフォントと文字サイズのみ指定しています。

一括で指定した書式を適用したいウィジェットには[ font = font ]を追加してあげると適用されます。

fig04

フォントにはTimesを指定し、文字サイズは10に統一しました。ちゃんと上の6つの項目は同じ字体(Times)で表現されているのがわかりますね。

下の4つはオプションをそのまま生かしています。[font=font]を追加せず、オプションを入れてあげれば、個別に設定することができます。

文字色や背景色を変えたい!

ラベルやボタンの文字色や、ボタンの色、ウィンドウの背景色を変える方法も探してみました。

  • ラベルの文字色を変えたい場合

各ウィジェットの設定に、[foreground="色"]を追加してあげます。

  • ボタンウィジェットの背景色や文字色を変えたい場合

ボタンの背景色指定: bg="色"

ボタンの文字色指定: fg="色" を各ウィジェットの設定に追加します。

  • ウィンドウの背景色を指定したい場合

[root.configure(bg="色")]を追記してあげます。

色の部分はredとか、blueとかでもOKですが、より細やかな色を使いたい場合はカラーコードを使えるので、お好みの色を使えます。Pythonで使用できる色見本について、以下のブログで紹介されていました。使用できないカラーコードもあるようで、それについても記載されていますので、ご興味のある方はご確認下さい。

参考:Python:tkinterで指定できる色名について|電脳産物

そして、試してみたのが次の図です。fontの設定と一緒に使うこともできますし、ボタンの場合は文字と背景、両方変更が可能です。

fig05

フォント名なんて覚えていませんよ!という方。確認する方法がありますよ!

ところで、使えるフォントの名前なんて、正直に言うとすぐに出てきませんし、フォント名を正確に記述する必要があるとなると、すぐに確認できるようになっていないと困っちゃいますし、なんならコピペできるようになってほしい。

というわけで、使えるフォントの一覧を取得する方法がちゃんとあるようです。

左上はテキストが用意してくれたサンプルコードです。右上は参考サイトにあったやり方をやってみました。下段の2点は実行結果の一部分です。

fig06

ずらーっとでてきたので、フォントの一覧は一部分だけですが、PCにインストールされているフォントが一覧で出てきたようです。右上の方法の時は「使えるフォントは○個ありますよ」的な文字が表示されていました。

それでは今回はコチラで終了です。お付き合い頂きありがとうございました。

----

参考サイト:

tkinter --- Tcl/Tk の Python インタフェース|Python公式ドキュメント

Tkinter テキストウィジェットのフォントを設定する方法|DelftStack

Tkinterの使い方:フォントの指定方法|だえうホームページ

python tkinter クリックされたウィジェットのテキストや属性を取得する|memopy pythonで作ってみました的なブログ

【Python/Tkinter】Label(ラベル)の使い方:文字フォント・サイズ・色・配置の設定|OFFICE54

Python fontについて|なつある語

【Python】ボタンの作成・文字色・背景色(Tkinter)|鎖プログラム

【Python】ラベルの作成・文字色・背景色(Tkinter)|鎖プログラム

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes