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

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

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

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

Tkinter

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

Q&A

解決済

2回答

12577閲覧

[Python3] tkinter, ラジオボタンとチェックボックスの初期値を設定したい

3265462164

総合スコア67

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2019/09/17 06:08

python3でtkinterを使用し、ラジオボタンとチェックボックスの組み合わせを作成しました。

デフォルトの状態で
フレームAとBは選択不可能な状態、
選択フレームでAかBを選ぶと、選択した側のチェックボックスが使えるような状態にしたいです。

検索しても上手く条件にあてはまるようなものが見つけられませんでした。
どなたかご教授願えませんでしょうか。

当方初心者のため非常に見づらいコードですが、よろしくお願いします。```Python 3.x
コード

from tkinter import * from tkinter import ttk root = Tk() root.title('設定') root.geometry("500x500+640+40") # Frame frame1 = ttk.Frame(root,padding=10) frame1.grid() # Label Frame lf = ttk.Labelframe(frame1, text='選択',padding=5) lf.grid(row=0,column=0,pady=5) #Radiobutton 1 rb1 = ttk.Radiobutton(lf, text='A ') rb1.grid(row=1,column=0,pady=5) #Radiobutton 2 rb2 = ttk.Radiobutton(lf, text='B') rb2.grid(row=1,column=1,pady=5) # Frame 2 frame2 = ttk.Frame(root,padding=10) frame2.place(x=0, y=80) # Label Frame 2 lf2 = ttk.Labelframe(frame2, text='A',padding=5) lf2.grid(row=4,column=0,pady=5) #Button 1 btn1 = ttk.Button(lf2, text='全選択', padding=5) btn1.grid(row=5,column=0,pady=5) #Button 2 btn2 = ttk.Button(lf2, text='全解除', padding=5) btn2.grid(row=5,column=1,pady=5) ######A ch1 = ttk.Checkbutton(lf2, text='CH1') ch1.grid(row=6,column=0,pady=5) ch2 = ttk.Checkbutton(lf2, text='CH2') ch2.grid(row=7,column=0,pady=5) ch3 = ttk.Checkbutton(lf2, text='CH3') ch3.grid(row=8,column=0,pady=5) # Frame 3 frame3 = ttk.Frame(root,padding=10) frame3.place(x=230, y=80) # Label Frame 3 lf3 = ttk.Labelframe(frame3, text='B',padding=5) lf3.grid(row=4,column=0,pady=5) #Button 3 btn3 = ttk.Button(lf3, text='全選択', padding=5) btn3.grid(row=5,column=0,pady=5) #Button 4 btn4 = ttk.Button(lf3, text='全解除', padding=5) btn4.grid(row=5,column=1,pady=5) ######B ch36 = ttk.Checkbutton(lf3, text='ch36') ch36.grid(row=6,column=0,pady=5) ch40 = ttk.Checkbutton(lf3, text='ch40') ch40.grid(row=7,column=0,pady=5) ch44 = ttk.Checkbutton(lf3, text='ch44') ch44.grid(row=8,column=0,pady=5) root.mainloop()

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

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

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

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

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

guest

回答2

0

ベストアンサー

はじめに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 08:52

magichan

総合スコア15898

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

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

3265462164

2019/09/17 23:39

magichanさん、どうもありがとうございました!! 意図していた通りの動きです。 本当に助かりました。 変数の使い方ですか。これを参考に色々触ってみようと思います。 ありがとうございました。
guest

0

tkinter checkbutton 初期値
でググりました。

以下のページが参考になりませんか?

https://qiita.com/nnahito/items/ad1428a30738b3d93762

投稿2019/09/17 06:22

t_obara

総合スコア5488

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

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

3265462164

2019/09/17 08:09

はい、このサイトは拝見しましたが私の知識ではBooleanVar()を上手く落とし込めないので質問させていただいております。
t_obara

2019/09/17 09:44

であれば、その旨質問に記載すれば良さそうに思いますが。。 上手く落とし込めないの意味がわかりませんが、何ができないのでしょう。
3265462164

2019/09/17 23:36

いえ、冷やかしのような性格の悪い人間を相手にする暇はござません。 そのような人間に説明する気もおきません。申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問