Python:tkinterで指定できる色名について

Python

Pythonで標準で利用できるGUIツールキットにtkinterがあります。
以下のようにtkinterモジュールインポートで簡単に利用できます。

import tkinter

一つ気になった点がありました。
GUIで指定できる背景色や文字色などの色名についてです。

Pythonのtkinterマニュアルには以下の通り記されていました。

color
色は rgb.txt ファイルの X カラーの名前か、または RGB 値を表す文字列として与えられます。

参考:Tk オプションデータ型 – tkinter

rgb.txtファイルとは何か?

マニュアルにあったrgb.txtには、tkinterで利用できるカラー名が記述されているのだろうと考えPythonのインストールフォルダ(Windowsの場合のPython3.8インストールフォルダであればC:/Users/《ユーザ名》/AppData/Local/Programs/Python/Python38/)を検索してみたのですが、rgb.txtやそれらしきファイルは見当たらず。

マニュアルに記載されていた《rgb.txt ファイルの X カラーの名前》のXカラーとはUnixのXウインドウシステムだと気づき、調べてみるとUnixがインストールされている端末の /usr/lib/X11/rgb.txt ファイルの事だと分かりました。

tkinterで使える色名へのリンク

海外のサイトの方がきちんと情報があった中でtkinterで使える色名の一番分かりやすかった ページを以下に示します。このサイトは色名がそれぞれの色で表示されているのでとても分かりやすいと思います。

/usr/lib/X11/rgb.txt

上記サイトの注意点
後半のSGI~で始まる色名は使えません。あと色名リストの最後から3つ目のIndigoは使えてIndigo2は使えません。一番最後のCrimsonは使えます。

見やすさは前述のページに劣りますが、WindowsやMacOSなどOS別の色名も含めて網羅されている以下のページもお勧めです。Python公式サイトtkinterの項目からリンクされているページです。

colors manual page – Tk Built-In Commands

上記ページによると例えばWindowsでは

systemBackground

とするとOSデフォルトの背景色が指定できたりします。

tkinterの色名は空白や大文字の扱いがあいまい

tkinterを使ったPythonスクリプトを作って気づいたのですが、色名で使われている文字は大文字小文字の区別なく表記できます。また、skyblueならsky blueのように単語同士に空白を入れても認識されます。

例)

色名
CrimsoncrimsonCRIMSON
SkyBlueskybluesky blue
YellowGreenyellowgreenYellow Green

極端な話、色名がSkyBlueと指定されていたら、SKYBLUE, skyblue, Sky blue, sKy BLUE… 全て可能です。単語と単語の区切りは区別されるようです。例)sk yblueは×

greyとgrayは同じ

色名のリストを見ていて気付いたのですが、greygrayは表記が違うだけで同じ色です。
さらにgreyとgray以外にも、グレー系がgrey0~grey100まで存在します。(gray0~gray100もある!)ちなみにgrey100gray100は16進表記で#FFFFFFなのでwhite(白)と同じです。

こんなところでUnixの名残りに出会うとは思いませんでした。

tkinterを使ったプログラムでの色名記述例

実際にtkinterでの色名を使ったスクリプトを紹介します。

実行イメージ(ウインドウの背景色

# tkinterでウインドウを出す

import tkinter  # Tk GUIツールキットを使う(必須)

root = tkinter.Tk()  # 
root.title("PythonのGUIウインドウ")
root.geometry("320x200")
root.resizable(True, True)
root.configure(bg="skyblue")  # 背景色を指定
root.mainloop()

実行イメージ(ボタンの文字色と背景色

# tkinterでボタンを表示

import tkinter  # Tk GUIツールキットを使う(必須)

root = tkinter.Tk()  # 
root.title("PythonのGUIウインドウ")
root.geometry("800x600")
button1 = tkinter.Button(root, text="tkinterの色名", bg="forest green", fg="orange", font=("Times New Roman", 48) )
button1.place(x=200, y=200)
root.mainloop()

以上、Python:tkinterで指定できる色名についてでした。

コメント

タイトルとURLをコピーしました