Tkinterの使い方:configメソッドでウィジェットの設定を変更する(configure)

configメソッドの説明ページアイキャッチ

このページにはプロモーションが含まれています

このページでは、Tkinter における config メソッド(configure メソッド)について解説していきます。

config メソッド

では、config メソッドについて解説していきたいと思います!

config メソッドとは

config メソッドとは、実行したウィジェット(ウィジェットのクラスのインスタンス)の設定を変更するメソッドとなります。例えば、config メソッドを利用することで、ウィジェットの背景色を変更したり、ウィジェットを無効状態に変更したりすることが可能です。

configメソッドの説明図

このメソッドは、全種類のウィジェットから実行可能なメソッドとなります。同様に、実行したウィジェットの設定を変更するメソッドに configure メソッドが存在しますが、この configure メソッドと config メソッドとは同じメソッドとなります。なので、どちらを使用しても問題ありません。

また、この config メソッドの特徴は既に作成済みのウィジェットの設定の変更が可能であるという点になります。

ウィジェットの設定は、ウィジェット作成時、すなわちウィジェットのクラスのコンストラクタ実行時にキーワード引数を指定して変更することも可能です。ただし、ウィジェットの設定の変更がウィジェット作成後に必要になる場合も多く、そのような場合には、作成済みのウィジェットに config メソッドを実行させて設定の変更を行うことになります。

コンストラクタとconfigメソッドでの設定変更の違いを説明する図

作成済みのウィジェットの設定が変更可能であるため、config メソッドを利用することで、「ボタンウィジェットがクリックされた」「マウスがクリックされた」「時間が経過した」などのイベント発生時にウィジェットの設定を変更させるようなことも可能となります。

イベント発生時にconfigメソッドでウィジェットの設定を変更する様子

スポンサーリンク

config メソッドの使い方

続いて、config メソッドの使い方について解説していきます。

config メソッドの実行の仕方

基本的には、他のメソッド同様に、ウィジェットを生成し、そのウィジェットに config メソッドを実行させればよいだけです。もう少し具体的に言うと、Tkinter には各種ウィジェット用のクラスが定義されていますので、そのクラスのコンストラクタを実行してウィジェットを生成し、そのインスタンスに必要なタイミングで config メソッドを実行させればよいです。

configメソッドの実行
# widget:各種ウィジェットクラスのインスタンス
widget.config(引数)

また、config メソッドの返却値はなし(None)となります。

config メソッドに指定可能な引数

config メソッド実行時にポイントになるのが引数になります。この config メソッドはキーワード引数を指定して実行することになります。config メソッドには、同時に複数のキーワード引数を指定することが可能です。

configメソッドの引数の説明図

基本的には、この config メソッドに指定可能なキーワード引数は、そのウィジェットのコンストラクタに指定可能なキーワード引数と同じになります。ただし、このウィジェットのコンストラクタに指定可能なキーワード引数はウィジェットの種類によって異なります。

なので、具体的に config メソッドに指定可能なキーワード引数は一言で説明することはできません…。ただ、下記ページのリンク先に、各種ウィジェットの解説ページを設置しており、さらにそれらのページでウィジェットのコンストラクタに指定可能なキーワード引数をまとめています。ですので、利用したいウィジェットのページを読んでいただければ、どんなキーワード引数が指定可能で、そのキーワード引数によって、どんなウィジェットの設定を行うことができるのかについて確認していただくことが可能です。

参考 「ウィジェット」の記事一覧だえうホームページ

config メソッドに指定可能な引数の調べ方

また、ウィジェットに keys メソッドを実行させることで、そのウィジェットで config メソッドに指定可能なキーワード引数一覧のリストを返却値として得ることができます。なので、とにかく config メソッドに指定可能なキーワード引数を調べたいのであれば、下記のように keys メソッドの返却値を print で出力してやれば良いです。

指定可能な引数
# widget:各種ウィジェットクラスのインスタンス
print(widget.keys())

他にも、例えば Visual Studio Code 等で開発を行っているのであれば、config メソッドの実行処理を記述するとインテリセンス機能が働いて指定可能なキーワード引数を提示してくれたりもします。

VSCodeのインテリセンス機能でconfigメソッドに指定可能なキーワード引数が提示される様子

こんな感じで、config メソッドに指定可能なキーワード引数については様々な方法で調べることが可能です。

config メソッドによる設定変更が反映されるタイミング

ここまで説明してきたように、ウィジェットに config メソッドを実行させることで、そのウィジェットの設定を変更することが可能です。

ただし、特に見た目に関する設定の変更に関しては、config メソッドの実行だけではウィジェットに反映されないので注意してください。config メソッドでは、基本的には設定の変更の登録のみを行うと考えてください。そして、登録された設定変更を実際にウィジェットへ反映するのは mainloop となります。したがって、ウィジェットに設定の変更が反映されるのは、config メソッドを実行した後に mainloop に戻ったタイミングとなります。なので、config メソッドを実行したのに mainloop に戻らなければ設定の変更がウィジェットに反映されないことになります。

例えば、イベントハンドラ内で config メソッドによって変更したウィジェットの設定は、そのイベントハンドラが終了したタイミングで反映されることになります。イベントハンドラは mainloop から実行されることになり、イベントハンドラ終了後に再び mainloop に戻るようになっています。なので、イベントハンドラで実施された設定変更は、そのイベントハンドラが終了して mainloop に戻ったタイミングで反映されることになります。

configメソッドによる設定変更のウィジェットへの反映タイミングの説明図

この mainloop に関しては、下記ページで詳しくまとめていますので、詳細に関しては下記ページを参照していただければと思います。とにかく Tkinter を上手く使いこなすためには mainloop の理解が不可欠となりますので、mainloop についての理解が不十分な方は、この機会に下記ページも読んでみていただければと思います。

tkinterのmainloopの解説ページのアイキャッチ 【Python】tkinterのmainloopについて解説

ただ、イベントハンドラで長い時間の sleep 等の待ちを行ったり、極端に処理の重いループを実行しなければ、基本的には config メソッドの設定の変更がウィジェットに反映されないようなことは起きないと思いますので安心してください。設定変更の反映が行われなかったり、反映が遅いような場合は、上記の内容について思い出していただければと思います。

また、どうしても config メソッドの実行後に、すぐに mainloop に戻すことができないような場合には update メソッドを利用するという手もあります。update メソッドに関しては下記で解説していますので、興味があれば読んでみてください。

tkinterのupdateメソッドの解説ページアイキャッチ 【Python/tkinter】updateメソッドについて解説

(参考) config メソッド以外でのウィジェットの設定変更

また、ここまでウィジェットの設定変更を config メソッドを利用して実施することを前提に解説を進めてきましたが、実は config メソッドを利用しなくても、下記を実行してウィジェットの設定変更を行うことも可能です。

代入による設定の変更
# widget:各種ウィジェットクラスのインスタンス
widget['キーワード引数名'] = 設定値

上記における キーワード引数名 には、 config メソッドに指定可能なキーワード引数の引数名と同じものを指定することができます。なので、メソッドを利用しなくても、上記のように代入処理により config メソッドと同等のウィジェットの設定変更を行うことが可能です。

ただ、config メソッドに指定可能な引数の調べ方 でも説明したように、多くの開発環境ではメソッドの実行処理を記述するとインテリセンス機能によってメソッドに指定可能な引数を提示してくれるようになっています。なので、特に慣れない間は、指定可能な引数が分かりやすい、config メソッドでの設定変更をオススメします。

スポンサーリンク

config メソッドの使用例

最後に、config メソッドの使用例を紹介します。今回は、ボタンクリック時にキャンバスウィジェットの背景色を変化させるアプリで config メソッドの使用例を示したいと思います。

スクリプト

それが下記のスクリプトになります。

configメソッドの使用例
import tkinter

def red():
    # キャンバスの背景色の設定を変更
    canvas.config(background='red')

    # クリックされたボタンを無効化・それ以外のボタンを通常化
    red_button.config(state=tkinter.DISABLED)
    green_button.config(state=tkinter.NORMAL)
    blue_button.config(state=tkinter.NORMAL)

def green():
    # キャンバスの背景色の設定を変更
    canvas.config(background='green')

    # クリックされたボタンを無効化・それ以外のボタンを通常化
    red_button.config(state=tkinter.NORMAL)
    green_button.config(state=tkinter.DISABLED)
    blue_button.config(state=tkinter.NORMAL)

def blue():
    # キャンバスの背景色の設定を変更
    canvas.config(background='blue')

    # クリックされたボタンを無効化・それ以外のボタンを通常化
    red_button.config(state=tkinter.NORMAL)
    green_button.config(state=tkinter.NORMAL)
    blue_button.config(state=tkinter.DISABLED)

app = tkinter.Tk()

canvas = tkinter.Canvas(
    app,
    width=200,
    height=200,
    background='gray'
)
canvas.grid(columnspan=3, column=0, row=0, padx=10, pady=10)

red_button = tkinter.Button(
    app,
    text='赤',
    font=('', 20),
    command=red
)
red_button.grid(column=0, row=1, padx=10, pady=10)

green_button = tkinter.Button(
    app,
    text='緑',
    font=('', 20),
    command=green
)
green_button.grid(column=1, row=1, padx=10, pady=10)

blue_button = tkinter.Button(
    app,
    text='青',
    font=('', 20),
    command=blue
)
blue_button.grid(column=2, row=1, padx=10, pady=10)

app.mainloop()

スクリプトの説明

上記スクリプトを実行することで起動するアプリにおいては、config メソッドを利用して2つのことを実現しています。

1つ目がキャンバスウィジェットの背景色の変更です。

このアプリでは  ボタン・ ボタン・ ボタンの3つのボタンウィジェットを作成しており、これらのボタンウィジェットがクリックされた際には、それぞれ redgreenblue 関数が実行されるようになっています。

そして、これらの関数の最初に実行しているのが下記となります(色名 はクリックされたボタンによって異なります)。

キャンバスの背景色の変更
canvas.config(background='色名')

canvas はキャンバスウィジェットであり、さらに background はウィジェットの背景色を変更するキーワード引数となります。そのため、各種ボタンがクリックされた際には、キャンバスウィジェットの背景色が変化することになります。

canvas.config(background='red')によってキャンバスの背景色が赤色に変化する様子

2つ目がボタンウィジェットの状態の変更です。

前述の各種ボタンウィジェットがクリックされた時に実行される redgreenblue 関数においては、先ほど説明したキャンバスの背景色の変更の次に下記のような処理を実行しています(下記は red 関数の例になります)。

ボタンの状態の変更(red関数)
red_button.config(state=tkinter.DISABLED)
green_button.config(state=tkinter.NORMAL)
blue_button.config(state=tkinter.NORMAL)

上記は、クリックされたボタンウィジェットを無効化し、それ以外のボタンウィジェットを有効化するための処理となります。state がウィジェットの状態を設定するキーワード引数で、値に tkinter.NORMAL を指定すれば、そのウィジェットが通常状態となり、値に tkinter.DISABLED を指定すれば、そのウィジェットが無効状態となります。無効状態になったボタンウィジェットはクリック不可となるため、これにより、前回クリックされたボタンウィジェットをクリックできないようにしています。

red_button.config(state=tkinter.DISABLED)によって赤ボタンが無効化される様子

スポンサーリンク

スクリプトの動作確認

最後にスクリプトの動作確認を行っておきましょう!

まず、先ほど示したスクリプトを実行すれば下記のようなアプリが起動すると思います。

サンプルスクリプトの実行によって起動するアプリ

 ボタン・ ボタン・ ボタンをそれぞれクリックすれば、クリックしたボタンに応じてキャンバスの背景色が変化することが確認できると思います。また、直前にクリックしたボタンは無効化されてクリックできないようになっていることも確認できると思います。違うボタンをクリックすれば、無効化が解除されて再度クリックできるようになることも確認できると思います。

ボタンのクリックによって各種ウィジェットの設定が変化する様子

こういった設定変更は全て config メソッドで実施しており、これらの動作から config メソッドの役割や、config メソッドを利用することで実現可能なことを感じ取っていただけるのではないかと思います。

今回はボタンクリックの例を示しましたが、config メソッドと下記のページで紹介している after メソッドとを併用すれば、定期的なタイミングでウィジェットの設定変更を行うこともできます。

Tkinterの使い方:after で処理を「遅らせて」or 処理を「定期的」に実行する

また、config メソッドと下記ページで紹介している bind メソッドとを併用すれば、マウスクリックやキーボードのキー押下等のイベントが発生したタイミングでウィジェットの設定の変更を行うことも可能です。

イベント処理解説ページのアイキャッチ Tkinterの使い方:イベント処理を行う

状況に応じて適時ウィジェットの設定の変更が必要になる場面も多く、そういった場面では config メソッドが活躍しますので、是非 config メソッドについては覚えておきましょう!

まとめ

このページでは、Tkinter における config メソッドについて解説しました!

config は、ウィジェットの設定変更を行うメソッドとなります。ウィジェットの作成時、すなわちウィジェットのクラスのコンストラクタ実行時にも、キーワード引数を指定してウィジェットの設定変更を行うことは可能ですが、既に作成済みのウィジェットの設定を変更する場合は、今回紹介した config メソッドの実行が必要となります。

この config メソッドに指定可能な引数はウィジェットによって異なりますので、詳細に関しては下記ページに設定しているリンク先から調べてみていただければと思います。

参考 「ウィジェット」の記事一覧だえうホームページ

Tkinter でアプリを開発するのであれば、この config メソッドを利用する機会も多いと思いますので、是非 config メソッドの役割や使い方は覚えておいてください!

同じカテゴリのページ一覧を表示