チェックボタンのステータスを抜き出すために論理演算で一つずつコードを書いておりますが、
今後チェックボタンを増やすにあたり、このままだと膨大な量のコードになることが想定されます。
リストを作成し、for文で記述すれば良いみたいなところまでは調べたのですが、
記述方法の検討がつきません。
記述方法ご存知の方いらしたら、教えていただけないでしょうか。
やりたいことは、# 論理演算 で記述している個所をもうすこしまとめたいです。
初心者のため非常に見づらいコードですが、よろしくお願いします。
python
1from tkinter import * 2from tkinter import ttk 3 4root = Tk() 5root.title('人口') 6root.geometry("500x450+640+40") 7 8 9frame1 = ttk.Labelframe(root, text='地域選択', padding=5) 10frame1.grid(row=0, column=0, columnspan=1, padx=15, pady=10, sticky='w') 11 12frame2 = ttk.Labelframe(root, text='関東',padding=5) 13frame2.grid(row=1,column=0, columnspan=1, padx=15, pady=10, sticky='nw') 14 15frame3 = ttk.Labelframe(root, text='関西',padding=5) 16frame3.grid(row=1,column=1, columnspan=1, padx=10, pady=10, sticky='nw') 17 18 19selected_frame = IntVar() 20 21def change_selected_frame(): 22 if selected_frame.get() == 0: 23 24 for child in frame2.winfo_children(): 25 child.configure(state='enable') 26 for child in frame3.winfo_children(): 27 child.configure(state='disable') 28 29 elif selected_frame.get() == 1: 30 for child in frame2.winfo_children(): 31 child.configure(state='disable') 32 for child in frame3.winfo_children(): 33 child.configure(state='enable') 34 35 else: 36 for child in frame2.winfo_children(): 37 child.configure(state='disable') 38 for child in frame3.winfo_children(): 39 child.configure(state='disable') 40 41 42rb1 = ttk.Radiobutton(frame1, text='関東 ', 43 variable=selected_frame, 44 value=0, 45 command=change_selected_frame) 46rb1.grid(row=1,column=0,pady=5) 47 48rb2 = ttk.Radiobutton(frame1, 49 text='関西', 50 variable=selected_frame, 51 value=1, 52 command=change_selected_frame) 53rb2.grid(row=1,column=1,pady=5) 54 55 56# 関東の全てのチェックボックスをONにする関数 57def check_all_kanto_checkboxes(): 58 val1.set(True) 59 val2.set(True) 60 val3.set(True) 61 val4.set(True) 62 63# 関東の全てのチェックボックスをOFFにする関数 64def clear_all_kanto_checkboxes(): 65 val1.set(False) 66 val2.set(False) 67 val3.set(False) 68 val4.set(False) 69 70# 関西の全てのチェックボックスをONにする関数 71def check_all_kansai_checkboxes(): 72 val5.set(True) 73 val6.set(True) 74 val7.set(True) 75 76# 関西の全てのチェックボックスをOFFにする関数 77def clear_all_kansai_checkboxes(): 78 val5.set(False) 79 val6.set(False) 80 val7.set(False) 81 82 83# 論理演算 84def check_box(): 85 if val1.get() and val2.get() and val3.get() and val4.get(): 86 print("東京 & 神奈川 & 千葉 & 埼玉") 87 elif val1.get() and val2.get() and val3.get(): 88 print("東京 & 神奈川 & 千葉") 89 elif val1.get() and val2.get() and val4.get(): 90 print("東京 & 神奈川 & 埼玉") 91 elif val1.get() and val3.get() and val4.get(): 92 print("東京 & 千葉 & 埼玉") 93 elif val2.get() and val3.get() and val4.get(): 94 print("神奈川 & 千葉 & 埼玉") 95 elif val1.get() and val2.get(): 96 print("東京 & 神奈川") 97 elif val1.get() and val3.get(): 98 print("東京 & 千葉") 99 elif val1.get() and val4.get(): 100 print("東京 & 埼玉") 101 elif val2.get() and val3.get(): 102 print("神奈川 & 千葉") 103 elif val2.get() and val4.get(): 104 print("神奈川 & 埼玉") 105 elif val3.get() and val4.get(): 106 print("千葉 & 埼玉") 107 elif val1.get(): 108 print("東京") 109 elif val2.get(): 110 print("神奈川") 111 elif val3.get(): 112 print("千葉") 113 elif val4.get(): 114 print("埼玉") 115 elif val5.get() and val6.get() and val7.get(): 116 print("大阪 & 兵庫 & 京都") 117 elif val5.get() and val6.get(): 118 print("大阪 & 兵庫") 119 elif val5.get() and val7.get(): 120 print("大阪 & 京都") 121 elif val6.get() and val7.get(): 122 print("兵庫 & 京都") 123 elif val5.get(): 124 print("大阪") 125 elif val6.get(): 126 print("兵庫") 127 elif val7.get(): 128 print("京都") 129 130 131btn1 = ttk.Button(frame2, text='全選択', padding=5, command=check_all_kanto_checkboxes) 132btn1.grid(row=5,column=0,pady=5) 133 134btn2 = ttk.Button(frame2, text='全解除', padding=5, command=clear_all_kanto_checkboxes) 135btn2.grid(row=5,column=1,pady=5) 136 137btn3 = ttk.Button(frame3, text='全選択', padding=5, command=check_all_kansai_checkboxes) 138btn3.grid(row=5,column=0,pady=5) 139 140btn4 = ttk.Button(frame3, text='全解除', padding=5, command=clear_all_kansai_checkboxes) 141btn4.grid(row=5,column=1,pady=5) 142 143btn5 = ttk.Button(text='集計', padding=5, command=check_box) 144btn5.grid(row=5,column=0,pady=5) 145 146btn6 = ttk.Button(text='キャンセル', padding=5) 147btn6.grid(row=5,column=1,pady=5) 148 149 150val1 = BooleanVar() 151val1.set(False) 152 153val2 = BooleanVar() 154val2.set(False) 155 156val3 = BooleanVar() 157val3.set(False) 158 159val3 = BooleanVar() 160val3.set(False) 161 162val4 = BooleanVar() 163val4.set(False) 164 165val5 = BooleanVar() 166val5.set(False) 167 168val6 = BooleanVar() 169val6.set(False) 170 171val7 = BooleanVar() 172val7.set(False) 173 174kt1 = ttk.Checkbutton(frame2, text='東京', variable=val1) 175kt1.grid(row=6,column=0, columnspan=1, padx=15, pady=5, sticky='w') 176 177kt2 = ttk.Checkbutton(frame2, text='神奈川', variable=val2) 178kt2.grid(row=7,column=0, columnspan=1, padx=15, pady=5, sticky='w') 179 180kt3 = ttk.Checkbutton(frame2, text='千葉', variable=val3) 181kt3.grid(row=8,column=0, columnspan=1, padx=15, pady=5, sticky='w') 182 183kt4 = ttk.Checkbutton(frame2, text='埼玉', variable=val4) 184kt4.grid(row=9,column=0, columnspan=1, padx=15, pady=5, sticky='w') 185 186 187ks1 = ttk.Checkbutton(frame3, text='大阪', variable=val5) 188ks1.grid(row=6,column=0, columnspan=1, padx=15, pady=5, sticky='w') 189 190ks2 = ttk.Checkbutton(frame3, text='兵庫', variable=val6) 191ks2.grid(row=7,column=0, columnspan=1, padx=15, pady=5, sticky='w') 192 193ks3 = ttk.Checkbutton(frame3, text='京都', variable=val7) 194ks3.grid(row=8,column=0, columnspan=1, padx=15, pady=5, sticky='w') 195 196 197selected_frame.set(-1) 198change_selected_frame() 199 200root.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/24 00:09