web-dev-qa-db-ja.com

Tkinterチェックボックスの状態の取得

Tkinterチェックボックスの状態を取得するにはどうすればよいですか?状態とは、チェックマークが付いているかどうかを取得することを意味します。

35
rectangletangle

作成するとき、variableキーワード引数を取ります。 IntVarからTkinterを渡します。チェックボックスをオンまたはオフにすると、varに含まれる値が対応するブール状態に設定されます。これはvar.get()としてアクセスできます:

チェック=> var.get()

チェックなし=> not var.get()

>>> root = Tkinter.Tk()
>>> var = Tkinter.IntVar()
>>> chk = Tkinter.Checkbutton(root, text='foo', variable=var)
>>> chk.pack(side=Tkinter.LEFT)
>>> var.get()  #unchecked
0
>>> var.get()  #checked
1
39
aaronasterling

新しいを使用する場合* tkinterのttkモジュールでは、変数を割り当てずにチェックボタンの状態を読み書きできます。

import tkinter
from tkinter import ttk
tkwindow = tkinter.Tk()
chk = ttk.Checkbutton(tkwindow, text="foo")
chk.grid(column=0, row=0)

新しいチェックボックスのデフォルトは「alternate」(「half-checked」と呼ばれることもある)になっていることに注意してください。

alternate

.state()メソッドを使用して現在の状態を読み取ることができます。

>>> print(chk.state())  # half-checked
('alternate',)
>>> print(chk.state())  # checked
('selected',)
>>> print(chk.state())  # not checked
()

コードで状態を設定するには:

chk.state(['selected'])  # check the checkbox
chk.state(['!selected']) # clear the checkbox
chk.state(['disabled'])  # disable the checkbox
chk.state(['!disabled','selected']) # enable the checkbox and put a check in it!

そして、特定の状態を確認する便利な方法は次のとおりです。

chk.instate(['selected'])  # returns True if the box is checked

私が見つけた2つのトリッキーなものがあります:

  1. 初期状態は「代替」であり、「選択」状態フラグを追加してもこの状態フラグはクリアされません。したがって、コード内でチェックボタンを切り替えたい場合は、最初に「代替」フラグをクリアする必要があります。

    chk.state(['!alternate'])
    
  2. を使用してチェックボタンを無効/有効にする場合

    chk.state(['disabled'])
    chk.state(['!disabled'])
    

    その後、すべてが正常に動作します。ただし、これらの一般的な代替方法を使用する場合:

    chk.config(state=tk.DISABLED)
    chk.config(state=tk.NORMAL)
    

    その後、「代替」フラグを再度アサートします。

    チェックボタンに変数を割り当てた場合、この動作は発生しませんが、変数を割り当てたい場合、この答えはおそらく役に立ちません:)


* ttkはPython 2.7(Tk 8.5)で利用可能になりました。この 質問 は、古い標準ウィジェットと新しい「テーマ」ウィジェットの違いについて説明しています。

16
bitsmack