はじめにRadiobutton
の初期値を制御方法です。
Radiobutton
にて何が選択されているかを格納する変数を
Python
1# 選択されたFrameを格納する変数 (0:A, 1:B)
2selected_frame = IntVar()
のように定義し、各Radiobutton
を
Python
1#Radiobutton 1(選択された場合 selected_frame の値は0)
2rb1 = ttk.Radiobutton(frame1, text='A', variable=selected_frame, value=0)
3#Radiobutton 2(選択された場合 selected_frame の値は1)
4rb2 = ttk.Radiobutton(frame1, text='B', variable=selected_frame, value=1)
のように選択されたときの値を定義してください。
あとは
Python
1# 初期値を設定 (Aを選択)
2selected_frame.set(0)
のように変数に値を入れることで初期状態を設定することができるかと思います。
次に Radiobutton
の状態によって選択した側のチェックボックスが使えるように(選択されていない側を使えないように)する方法です。
これは
Python
1rb1 = ttk.Radiobutton(frame1, text='A', variable=selected_frame, value=0, command=change_selected_frame)
のように、Radiobutton
の commandパラメータにて、Radiobutton
が押されたと
きに呼び出される関数を設定します。
あとは、この関数の中で、
Python
1def change_selected_frame():
2 # Aが選択されてる
3 if selected_frame.get() == 0:
4 ch1.configure(state='enable')
5 ch2.configure(state='enable')
6 ch3.configure(state='enable')
7 ch36.configure(state='disable')
8 ch40.configure(state='disable')
9 ch44.configure(state='disable')
10 # Bが選択されてる
11 elif selected_frame.get() == 1:
12 ch1.configure(state='disable')
13 ch2.configure(state='disable')
14 ch3.configure(state='disable')
15 ch36.configure(state='enable')
16 ch40.configure(state='enable')
17 ch44.configure(state='enable')
18 # 選択されていない
19 else:
20 ch1.configure(state='disable')
21 ch2.configure(state='disable')
22 ch3.configure(state='disable')
23 ch36.configure(state='disable')
24 ch40.configure(state='disable')
25 ch44.configure(state='disable')
のように Checkbutton
を有効・無効を切り替えてことによって、希望する動作を作成することができるかと思います。
以上、以下に動作するコードを書いておきますので参考にしてください
Python
1from tkinter import *
2from tkinter import ttk
3
4root = Tk()
5root.title('設定')
6root.geometry("500x500+640+40")
7
8# Frame1
9frame1 = ttk.Labelframe(root, text='選択', padding=5)
10frame1.grid(row=0,column=0)
11
12# Frame 2
13frame2 = ttk.Labelframe(root, text='A',padding=5)
14frame2.grid(row=1,column=0)
15
16# Frame 3
17frame3 = ttk.Labelframe(root, text='B',padding=5)
18frame3.grid(row=1,column=1)
19
20# 選択されたFrameを格納する変数 (0:A, 1:B)
21selected_frame = IntVar()
22
23def change_selected_frame():
24 # Aが選択されてる
25 if selected_frame.get() == 0:
26 # Frame2内のWidgetを全てEnable
27 for child in frame2.winfo_children():
28 child.configure(state='enable')
29 # Frame3内のWidgetを全てDisable
30 for child in frame3.winfo_children():
31 child.configure(state='disable')
32 # Bが選択されてる
33 elif selected_frame.get() == 1:
34 # Frame2内のWidgetを全てDisable
35 for child in frame2.winfo_children():
36 child.configure(state='disable')
37 # Frame3内のWidgetを全てEnable
38 for child in frame3.winfo_children():
39 child.configure(state='enable')
40 # 選択されていない
41 else:
42 # Frame2/3内のWidgetを全てDisable
43 for child in frame2.winfo_children():
44 child.configure(state='disable')
45 for child in frame3.winfo_children():
46 child.configure(state='disable')
47
48#Radiobutton 1(選択された場合 selected_frame の値は0)
49rb1 = ttk.Radiobutton(frame1, text='A',
50 variable=selected_frame,
51 value=0,
52 command=change_selected_frame)
53rb1.grid(row=1,column=0,pady=5)
54
55#Radiobutton 2(選択された場合 selected_frame の値は1)
56rb2 = ttk.Radiobutton(frame1,
57 text='B',
58 variable=selected_frame,
59 value=1,
60 command=change_selected_frame)
61rb2.grid(row=1,column=1,pady=5)
62
63#Button 1
64btn1 = ttk.Button(frame2, text='全選択', padding=5)
65btn1.grid(row=5,column=0,pady=5)
66
67#Button 2
68btn2 = ttk.Button(frame2, text='全解除', padding=5)
69btn2.grid(row=5,column=1,pady=5)
70
71#A
72ch1 = ttk.Checkbutton(frame2, text='CH1')
73ch1.grid(row=6,column=0,pady=5)
74
75ch2 = ttk.Checkbutton(frame2, text='CH2')
76ch2.grid(row=7,column=0,pady=5)
77
78ch3 = ttk.Checkbutton(frame2, text='CH3')
79ch3.grid(row=8,column=0,pady=5)
80
81#Button 3
82btn3 = ttk.Button(frame3, text='全選択', padding=5)
83btn3.grid(row=5,column=0,pady=5)
84
85#Button 4
86btn4 = ttk.Button(frame3, text='全解除', padding=5)
87btn4.grid(row=5,column=1,pady=5)
88
89#B
90ch36 = ttk.Checkbutton(frame3, text='ch36')
91ch36.grid(row=6,column=0,pady=5)
92
93ch40 = ttk.Checkbutton(frame3, text='ch40')
94ch40.grid(row=7,column=0,pady=5)
95
96ch44 = ttk.Checkbutton(frame3, text='ch44')
97ch44.grid(row=8,column=0,pady=5)
98
99# 初期値を設定
100selected_frame.set(-1) # 0,1 以外の値を設定する
101change_selected_frame() # Frameの状態を初期状態に合わせる
102
103root.mainloop()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/17 23:39