質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1968閲覧

Python tkinterの複数のチェックボタンで初期値を設定したい

kuroari

総合スコア1

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/28 08:51

編集2023/02/01 12:56

前提

Pythonのtkinterで複数のチェックボタンの初期値を設定したいと思っていますが、うまく動きません。
チェックボタンに初期値が反映される条件など教えていただければと思います。

実現したいこと

  • 複数チェックボックスの初期値をそれぞれ設定する。

該当のソースコード

Python

1from tkinter import * 2from tkinter import ttk 3 4def main(): 5 6 global root 7 root = Tk() 8 root.title("test") 9 window_main() 10 11 root.mainloop() 12 13def window_main(): 14 root.geometry('650x300') 15 frame = ttk.Frame(root, width=650, height=300) 16 frame.pack() 17 18 label_chk1 = ttk.Label(frame,text = 'chk1') 19 chk1_check = BooleanVar() 20 chk_chk1 = ttk.Checkbutton(frame,variable=chk1_check) 21 label_chk2 = ttk.Label(frame,text = 'chk2') 22 chk2_check = BooleanVar() 23 chk_chk2 = ttk.Checkbutton(frame,variable=chk2_check) 24 label_chk3 = ttk.Label(frame,text = 'chk3') 25 def chk3_check_change(): 26 if chk3_check.get(): 27 entry_chk3_skill.config(state='normal') 28 else: 29 entry_chk3_skill.config(state='disabled') 30 chk3_check = BooleanVar() 31 chk_chk3 = ttk.Checkbutton(frame,command=chk3_check_change,variable=chk3_check) 32 label_chk4 = ttk.Label(frame,text = 'chk4') 33 chk4_check = BooleanVar() 34 chk_chk4 = ttk.Checkbutton(frame,variable=chk4_check) 35 label_chk3_skill = ttk.Label(frame,text = 'chk3Entry') 36 entry_chk3_skill = ttk.Entry(frame,width=5,state='disabled') 37 38 39 label_chk1.place(x=10,y=11) 40 chk_chk1.place(x=40,y=10) 41 label_chk2.place(x=110,y=11) 42 chk_chk2.place(x=140,y=10) 43 label_chk3.place(x=200,y=11) 44 chk_chk3.place(x=230,y=10) 45 label_chk4.place(x=300,y=11) 46 chk_chk4.place(x=330,y=10) 47 label_chk3_skill.place(x=200,y=31) 48 entry_chk3_skill.place(x=280,y=30) 49 50if __name__ == "__main__": 51 main()

上記コードの実行結果
イメージ説明

試したこと

以下のように呼び出す関数内にget()を書けば初期値が反映されるようになる。
chk3_check_change()の外に書いても反映されない

def chk3_check_change(): if chk4_check.get(): pass if chk3_check.get(): entry_chk3_skill.config(state='normal') else: entry_chk3_skill.config(state='disabled')

補足情報(FW/ツールのバージョンなど)

python 3.11.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2023/01/28 09:39 編集

「初期値を設定したい」とありますが、どこにどのような値を初期値として設定したいのですか? もしくは、どこにどのような値が設定されると思っていますか?
kuroari

2023/01/28 12:46

チェックボタンのチェックの状態の初期値が変更前だと黒い四角いなっているのですが、それを何もついていない状態(False)に変更したいです。
guest

回答1

0

ベストアンサー

初期値を設定したいのであれば、初期値をちゃんと設定すればいいのです。

python

1chk4_check = BooleanVar() 2chk4_check.set(False) # 初期値 3chk_chk4 = ttk.Checkbutton(frame,variable=chk4_check)

投稿2023/01/28 14:00

TakaiY

総合スコア12611

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuroari

2023/01/28 15:30

chk4_check = BooleanVar()の時点でFalseが初期値として入るのでchk4_check.set(False) を書かなくてもFalseが入ります。 chk3_checkではset(False) をしていないですが、Falseに設定されます。
TakaiY

2023/01/29 02:45

chk4_check の値がFalse/Trueになっていても、チェックボックスの表示がおかしいということだと解決策はわかりません。 こちらで同様のコードを実行しても再現はしませんでした。
kuroari

2023/01/30 03:09

そうなのですか… 環境のせいですかね…
kuroari

2023/02/01 03:56

globalにすると治りました。ありがとうございます。 スコープの問題だったのですね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問