前提
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
回答1件