田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【tkinter】ウィジェットを無効化する方法【Python】

f:id:vigilantPotato:20210626144821p:plain
各ウィジェットのstateオプションを設定することで、ウィジェットの有効・無効を切り替えることができる。「Checkbutton」を用いた無効化例はこちら


【スポンサーリンク】


ウィジェットの有効・無効を設定

ウィジェットのオプションstateを「disable」に設定することで、ウィジェットを無効化することができる。以下、ボタンウィジェットを無効化した状態で表示した例を示す。

import tkinter

root = tkinter.Tk()

#ボタン
b = tkinter.Button(
    root,
    text="button",
    state="disable",    #無効化設定
)
b.pack()

root.mainloop()
f:id:vigilantPotato:20210626145000p:plain

stateオプションを「disable」にすることで、無効化設定を行っている。表示されたボタンは灰色で、クリックしてボタンを押すことができない状態になっている。

[↑ 目次へ]


【スポンサーリンク】


10回クリックすると無効化されるボタン

生成時ではなく、一定回数クリックしたときに無効化されるボタンを作成する例を示す。

import tkinter

root = tkinter.Tk()

#ボタンクリック時に実行する関数
def disable_clicked():
    count_num = b["text"] +1    #クリック回数をカウント
    b["text"] = count_num       #ボタンに表示

    #10に到達したらdisableに設定
    if count_num == 10:
        b["state"] = "disable"  #無効化


#ボタン
b = tkinter.Button(
    root,
    width=15,
    text=0,         #初期値
    command=disable_clicked,    #クリック時に実行する関数
)
b.pack()

root.mainloop()

実行するとボタンが一つ表示され、クリックするとクリック回数がボタン上に表示される。クリック回数が10回に達すると、ボタンウィジェットは無効化される。

f:id:vigilantPotato:20210626145126p:plain
f:id:vigilantPotato:20210626145152p:plain
f:id:vigilantPotato:20210626145201p:plain

[↑ 目次へ]


【スポンサーリンク】


無効化できない例

bindメソッドを用いて関数と紐づけた場合は、ウィジェットを無効化しても関数は実行されてしまう。以下、先ほどの例を用いて、bindメソッドで関数と紐づけた例を示す。

import tkinter

root = tkinter.Tk()

#ボタンクリック時に実行する関数
def disable_clicked(event):
    count_num = b["text"] +1    #クリック回数をカウント
    b["text"] = count_num       #ボタンに表示

    #10に到達したらdisableに設定
    if count_num == 10:
        b["state"] = "disable"  #無効化


#ボタン
b = tkinter.Button(
    root,
    width=15,
    text=0,         #初期値
)
b.bind("<Button-1>", disable_clicked)   #関数とbind
b.pack()

root.mainloop()

今回の例では、クリック回数が10回に到達するとウィジェットは無効化されるが、クリックしてもカウントは継続され、関数が実行されていることが分かる。

f:id:vigilantPotato:20210626145248p:plain

[↑ 目次へ]


【スポンサーリンク】