chihiro1364
@chihiro1364

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

tkinterのCheckbuttonウィジェットのonvalueはどう使うのか?

解決したいこと

調べるに、チェックボックスにチェックが入った時の値が設定出来る引数、
チェックが入った時の値であり初期値はTrueとの事。

同じくoffvalueにはチェックが入ってない時の真偽値設定が出来るそうで、
チェックが入ってない場合にoffvalueオプションでTrueを設定入すると、
チェックを何度押しても延々とチェックされた状態が続きます。

しかし逆に、onvalueにFalseを設定すると延々とFalseが表示されると思いきや、何度チェックを押しても延々とチェックの入った状態が続き、切り替わりすらしません。

なぜなのかと言う質問が一点と、

仮にこう言うものだとして実用できる場面ってありますか?
という二点の質問をさせて下さい。
```

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

#onvalue
import tkinter
root = tkinter.Tk()
root.geometry("400x200")
checkbox = tkinter.Checkbutton(text="チェックボックス", onvalue=False)
checkbox.pack()
root.mainloop()



#offvalueの場合
root = tkinter.Tk()
root.geometry("400x200")
checkbox = tkinter.Checkbutton(text="チェックボックス",  offvalue=True)
checkbox.pack()
root.mainloop()
0

2Answer

onvalue,offvalueを設定しなければ問題なく動いているということでお間違いないでしょうか?

onvalueやoffvalueはチェックしたとき・外した時にvariableにいれる値を指定するもののようです。真偽値だけでなく文字列も指定できるようです。
ですので、onvalue・offvalueと同時にvariableも引数に指定してあげるとうまくいかないでしょうか?

1Like

Comments

  1. @chihiro1364

    Questioner

    はい、問題無く動いています。

    私が調べ感じでは、onvalueはチェックボックスにチェックがついている時の値を設定出来て、
    variableに設定する値は、絶対指定するべきものではなく、指定したいなら指定していいよ。
    ってスタンスに感じました。
    大概の場合でvaiableは設定しますけどもね。

    なので仮にonvalueにTrueではなく、"hoge"とか入れた場合は"hoge"が値になり、
    variableで値を代入する場合、代入先に"hoge"が入る感じなのかなと。


    ただ、variableに値を指定するものだとしても任意にしても
    offvalueの場合だと、
    「チェックが付いていない時にチェックを付ける」
    と言う事ができるのに、

    「チェックがついている状態の時に、チェックを外す。」
    という事が出来ないのはどうも腑に落ちないのです。

  2. @chihiro1364

    Questioner

    なるほど。
    と言うか語と意味の捉え方の違いの様にもみえますし多分これ、論理でこうなるべきって考えたらどつぼにはまるやつですね。
    教えて頂いた内容ですと、確かに一番近いのかな?と思いました。
    ありがとうございます。

公式リファレンスを読んでなんとなく理解できました。
ここからは私の理解なので間違っていたらすみません。

#前提
チェックボックスをクリックした際に、「variable」の値が更新される。
「onvalue」は、「variable」がどのような値の時のときにチェックをオンにするかの値。「offvalue」は、「variable」がどのような値の時のときにチェックをオフにするかの値。
デフォルト値はそれぞれ1と0。

#実際の動作
####「onvalue=False」とだけ設定した場合
「onvalue=False(≒0)」
「offvalue=0(デフォルト)」
チェックボックスクリックでvariable=1になったとき=>onvalue・offvalueともに該当しないのでチェックボックスの状態を変化させない。
チェックボックスクリックでvariable=0になったとき=>onvalueに該当するのでチェックオン
(おそらくoffvalueよりもonvalueに一致するかの判定が優先されている)

####「offvalue=True」とだけ設定した場合
「onvalue=1(デフォルト)」
「offvalue=True(≒1)」

チェックボックスクリックでvariable=1になったとき=>onvalueに該当するのでチェックオン
チェックボックスクリックでvariable=0になったとき=>onvalue・offvalueともに該当しないのでチェックボックスの状態を変化させない。

以上の判定で、常にチェックボックスがオンになっているのではないかと思います。


こちらが公式リファレンスですので、ご参考ください。

0Like

Comments

  1. @chihiro1364

    Questioner

    ありがとうございます。
    理解出来ました。

Your answer might help someone💌