【Python tkinter】rootメインウィンドウの背景色を変更:configの設定変更

時計 2022.06.05 / 時計

【Python tkinter】rootメインウィンドウの背景色を変更:configの設定変更

記事ではPythonのtkinterで、rootメインウィンドウの背景色変更する方法について解説して言います。

メインウィンドウのデフォルトの背景色は灰色(gray)です。この背景色は好きな色に変更することができます。

メインウィンドウの背景色の変更は、configure()メソッドを使用する、またはオプション(プロパティ)を直接変更する方法があります。

本記事を通して、rootメインウィンドウの背景色変更方法について理解を深めていきましょう。

メインウィンドウrootとは

tkinterで作成されるGUIアプリケーションは、「メインウィンドウ」「メインフレーム」「ウィジェット」のパーツで構成されます。

GUIアプリケーションの画面作成の流れは基本的に以下のようになります。

  1. メインウィンドウを生成
  2. フレームを生成し、メインウィンドウに配置
  3. ウィジェットを生成し、フレームに配置

上記の流れでGUI画面を作成していくため、メインウィンドウは階層構造の最上位に位置します。

メインウィンドウはrootという名前で生成されることがほとんどです。

tkinterの基本的な使い方は以下記事をご参照ください。

背景色の変更方法

メインウィンドウの背景色を変更する方法は次の2種類あります。

  • tkinter.Tkクラスのconfigure()メソッドを使用
  • tkinter.Tkのプロパティ(オプション)を直接変更

上記方法はどちらも色を有効な色名か、6桁のカラーコードで指定します。

configure()メソッドによる背景色の変更

configure()メソッドとは

configure()メソッドはウィンドウやウィジェットの属性(オプション)を変更することに使用されます。

構文

window.configure(attribute=value)

ウィンドウまたはウィジェットがサポートしているオプションについては、その要素に対してconfig()メソッドを引数なしで実行することで確認できます。

import tkinter as tk
root = tk.Tk()
root.configure()
# 出力結果
  {'bd': ('bd', '-borderwidth'),
 'borderwidth': ('borderwidth',
  'borderWidth',
  'BorderWidth',
  <string object: '0'>,
  0),
 'class': ('class', 'class', 'Class', 'Toplevel', 'Tk'),
 'menu': ('menu', 'menu', 'Menu', '', ''),
…
}

上記のように辞書型の値が返されます。辞書の値はキーがオプション名、値が5要素のタプルとなっています。bdやbgなどは5要素ではなく2要素のみのタプルが返されていますが、これは短縮形のオプション名であり、本当のオプション名(bdはborderwidth、bgはbackground)が返されます。

値で返される5要素のタプルはそれぞれ次のような意味を持ちます。

インデックス 説明
0 オプション名
1 データベースの検索用オプション名
2 データベースの検索用のオプションクラス
3 デフォルト値
4 現在の値

ウィンドウやウィジェットにどのような属性(オプション)が設定できるかはconfigure()メソッドを利用して確認してみてください。

背景色の変更:bgまたはbackground

ウィンドウの背景色はbgまたはbackground属性を変更することで変更ができます。

例えばメインウィンドウの背景色を黒く変更したい場合は次のように設定します。

import tkinter as tk
root = tk.Tk()
root.title("背景色の変更")
root.configure(bg="black")
root.mainloop()
tkinter:背景色を変更

プロパティ値の変更による背景色の変更

configure()メソッドだけでなく、プロパティ値を次のように変更することで背景色を変更することができます。

import tkinter as tk
root = tk.Tk()
root.title("背景色の変更")
root["bg"] = "black"
root.mainloop()

背景色の変更はconfigure()メソッドでもプロパティ変更でもどちらでも同じです。使いやすい方を利用してください。