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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Q&A

解決済

1回答

6903閲覧

[Python3] tkinter, 複数チェックボタンの制御

3265462164

総合スコア67

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

0グッド

1クリップ

投稿2019/09/19 01:14

複数あるチェックボタンの制御、
・一括での全選択
・一括での全解除
を考えているのですが、どのようにコードを書けば良いでしょうか。

ご存知の方、ご教授頂けると幸いです。

python

1 2from tkinter import * 3from tkinter import ttk 4 5root = Tk() 6root.title('人口') 7root.geometry("500x500+640+40") 8 9 10frame1 = ttk.Labelframe(root, text='地域選択', padding=5) 11frame1.grid(row=0, column=0, columnspan=1, padx=15, pady=10, sticky='w') 12 13frame2 = ttk.Labelframe(root, text='関東',padding=5) 14frame2.grid(row=1,column=0, columnspan=1, padx=15, pady=10, sticky='nw') 15 16frame3 = ttk.Labelframe(root, text='関西',padding=5) 17frame3.grid(row=1,column=1, columnspan=1, padx=10, pady=10, sticky='nw') 18 19 20selected_frame = IntVar() 21 22def change_selected_frame(): 23 if selected_frame.get() == 0: 24 25 for child in frame2.winfo_children(): 26 child.configure(state='enable') 27 for child in frame3.winfo_children(): 28 child.configure(state='disable') 29 30 elif selected_frame.get() == 1: 31 for child in frame2.winfo_children(): 32 child.configure(state='disable') 33 for child in frame3.winfo_children(): 34 child.configure(state='enable') 35 36 else: 37 for child in frame2.winfo_children(): 38 child.configure(state='disable') 39 for child in frame3.winfo_children(): 40 child.configure(state='disable') 41 42 43rb1 = ttk.Radiobutton(frame1, text='関東 ', 44 variable=selected_frame, 45 value=0, 46 command=change_selected_frame) 47rb1.grid(row=1,column=0,pady=5) 48 49rb2 = ttk.Radiobutton(frame1, 50 text='関西', 51 variable=selected_frame, 52 value=1, 53 command=change_selected_frame) 54rb2.grid(row=1,column=1,pady=5) 55 56 57btn1 = ttk.Button(frame2, text='全選択', padding=5) 58btn1.grid(row=5,column=0,pady=5) 59 60btn2 = ttk.Button(frame2, text='全解除', padding=5) 61btn2.grid(row=5,column=1,pady=5) 62 63btn3 = ttk.Button(frame3, text='全選択', padding=5) 64btn3.grid(row=5,column=0,pady=5) 65 66btn4 = ttk.Button(frame3, text='全解除', padding=5) 67btn4.grid(row=5,column=1,pady=5) 68 69 70val1 = BooleanVar() 71val1.set(False) 72 73val2 = BooleanVar() 74val2.set(False) 75 76val3 = BooleanVar() 77val3.set(False) 78 79val3 = BooleanVar() 80val3.set(False) 81 82val4 = BooleanVar() 83val4.set(False) 84 85val5 = BooleanVar() 86val5.set(False) 87 88val6 = BooleanVar() 89val6.set(False) 90 91val7 = BooleanVar() 92val7.set(False) 93 94kt1 = ttk.Checkbutton(frame2, text='東京', variable=val1) 95kt1.grid(row=6,column=0, columnspan=1, padx=15, pady=5, sticky='w') 96 97kt2 = ttk.Checkbutton(frame2, text='神奈川', variable=val2) 98kt2.grid(row=7,column=0, columnspan=1, padx=15, pady=5, sticky='w') 99 100kt3 = ttk.Checkbutton(frame2, text='千葉', variable=val3) 101kt3.grid(row=8,column=0, columnspan=1, padx=15, pady=5, sticky='w') 102 103kt4 = ttk.Checkbutton(frame2, text='埼玉', variable=val4) 104kt4.grid(row=9,column=0, columnspan=1, padx=15, pady=5, sticky='w') 105 106 107ks1 = ttk.Checkbutton(frame3, text='大阪', variable=val5) 108ks1.grid(row=6,column=0, columnspan=1, padx=15, pady=5, sticky='w') 109 110ks2 = ttk.Checkbutton(frame3, text='兵庫', variable=val6) 111ks2.grid(row=7,column=0, columnspan=1, padx=15, pady=5, sticky='w') 112 113ks3 = ttk.Checkbutton(frame3, text='京都', variable=val7) 114ks3.grid(row=8,column=0, columnspan=1, padx=15, pady=5, sticky='w') 115 116 117selected_frame.set(-1) 118change_selected_frame() 119 120root.mainloop() 121 122コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

チェックボックスの制御は、初期値の設定同様にチェックボックスにバインドされた変数の値を変更するだけです。

既に各チェックボックスに変数がバインドされておりますので、例えば『関東側のチェックボックスを全選択』を行いたいのであれば

Python

1# 関東の全てのチェックボックスをONにする関数 2def check_all_kanto_checkboxes(): 3 val1.set(True) 4 val2.set(True) 5 val3.set(True) 6 val4.set(True)

のような関数を作って、

Python

1btn1 = ttk.Button(frame2, text='全選択', padding=5, command=check_all_kanto_checkboxes)

のようにして、ボタンを押したときにこの関数を呼ぶとよいかと思います。

投稿2019/09/19 02:15

magichan

総合スコア15898

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

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

3265462164

2019/09/19 02:55

magichanさん、いつもありがとうございます!! 新たに関数を作って設定すれば良いのですね。 教えていただいた内容をもとに下記コードで、思った通りの動作を確認しております。 ありがとうございました。 # 関東の全てのチェックボックスをONにする関数 def check_all_kanto_checkboxes(): val1.set(True) val2.set(True) val3.set(True) val4.set(True) # 関東の全てのチェックボックスをOFFにする関数 def clear_all_kanto_checkboxes(): val1.set(False) val2.set(False) val3.set(False) val4.set(False) # 関西の全てのチェックボックスをONにする関数 def check_all_kansai_checkboxes(): val5.set(True) val6.set(True) val7.set(True) # 関西の全てのチェックボックスをOFFにする関数 def clear_all_kansai_checkboxes(): val5.set(False) val6.set(False) val7.set(False) btn1 = ttk.Button(frame2, text='全選択', padding=5, command=check_all_kanto_checkboxes) btn1.grid(row=5,column=0,pady=5) btn2 = ttk.Button(frame2, text='全解除', padding=5, command=clear_all_kanto_checkboxes) btn2.grid(row=5,column=1,pady=5) btn3 = ttk.Button(frame3, text='全選択', padding=5, command=check_all_kansai_checkboxes) btn3.grid(row=5,column=0,pady=5) btn4 = ttk.Button(frame3, text='全解除', padding=5, command=clear_all_kansai_checkboxes) btn4.grid(row=5,column=1,pady=5)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問