標題の件、ラジオボタンのグループ管理は variableの設定を 同じ変数を指定することでなされるのではないのでしょうか?
初期値をこちらの記事を参考に対処したつもりですが、
・初期値の設定選択が活きていない
・グループ単位で 単一選択の制御ができない
・クリックではなく、マウスオーバのみで選択になってしまうことがある
問題が生じています。
本来 二つのグループのラジオボタンなので、双方YesもしくはNoのいづれかが選択されているべきなのですが、ご覧の有様です。
どういう対策を投じればよいのでしょうか?
Python
1from tkinter import * 2import tkinter.ttk as ttk 3import tkinter.scrolledtext as tksc 4import math 5 6class Apprication(ttk.Frame): 7 8 def __init__(self, app): 9 super().__init__(app) 10 self.pack(fill=BOTH, expand=True) 11 12 btn1 = ttk.Button(self, text="Sub", command=self.openDialog) 13 btn1.bind('<Return>', self.openDialog) 14 btn1.pack(fill=BOTH, expand=True) 15 btn1.focus_set() 16 17 btn2 = ttk.Button(self, text="Quit", command=app.quit) 18 btn2.bind('<Return>', lambda _: app.quit()) 19 btn2.pack(fill=BOTH, expand=True) 20 21 self.menu() 22 23 24 25 def menu(self): 26 menu_top = Menu(app) 27 menu_file = Menu(menu_top, tearoff=False) 28 menu_open = Menu(menu_top, tearoff=False) 29 30 app.configure(menu=menu_top, bg="#F0FFFF") 31 32 menu_top.add_cascade (label='File(F)', menu=menu_file, underline=0) 33 34 menu_file.add_cascade(label='Open(O)', underline=0, menu=menu_open) 35 menu_open.add_command(label='Sub(S)', underline=0, command=self.openDialog) 36 menu_file.add_command(label='Quit(Q)',underline=0, command=app.quit) 37 38 39 40 41 42 # 子画面開く 43 def openDialog(self, event=None): 44 45 self.dialog = Toplevel(self) 46 self.dialog.title("Sub Menu") 47 48 #フォームサイズを実行端末から導き、ド真中に配置表示 49 lw = math.ceil(ww * 0.408) 50 lh = math.ceil(wh * 0.477) 51 self.dialog.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)) ) 52 53 self.dialog.configure(bg="#F0FFFF") 54 self.dialog.resizable(0,0) 55 self.dialog.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) 56 57 58 # modalに 59 self.dialog.grab_set() 60 61 lbfrm1 = LabelFrame(self.dialog, text="Detail setting") 62 lbfrm1.grid(padx=(10,10)) 63 radioValue1 = IntVar() 64 rd1 = Radiobutton(lbfrm1, text="Yes", bg="#F0FFFF", variable=radioValue1, value=1, activebackground="#F0FFFF") 65 rd1.grid(row=1, column=0) 66 radioValue1.set(1) 67 rd2 = Radiobutton(lbfrm1, text="No", bg="#F0FFFF", variable=radioValue1, value=2, activebackground="#F0FFFF") 68 rd2.grid(row=1, column=1) 69 radioValue2 = IntVar() 70 rd3 = Radiobutton(lbfrm1, text="Yes", bg="#F0FFFF", variable=radioValue2, value=1, activebackground="#F0FFFF") 71 rd3.grid(row=1, column=3) 72 radioValue2.set(1) 73 rd4 = Radiobutton(lbfrm1, text="No", bg="#F0FFFF", variable=radioValue2, value=2, activebackground="#F0FFFF") 74 rd4.grid(row=1, column=4) 75 76 77 # 閉じるボタン 78 btn3 = Button(self.dialog, text='Quit', command=self.closeDialog, width=10, takefocus=1) 79 btn3.grid(row=5, column=10, pady=10, padx=(0,10)) 80 81 82 self.dialog.grid_rowconfigure(1, weight=1) 83 self.dialog.grid_rowconfigure(3, weight=1) 84 self.dialog.grid_columnconfigure(2, weight=1) 85 86 87 88 # 子画面閉じる 89 def closeDialog(self): 90 self.dialog.destroy() 91 92 93 94if __name__ == '__main__': 95 96 #世間でいうrootをappとしています 97 app = Tk() 98 99 #実行端末の画面サイズを取得 100 ww = app.winfo_screenwidth() 101 wh = app.winfo_screenheight() 102 103 app.update_idletasks() 104 105 #フォームサイズを実行端末から導き、ド真中に配置表示 106 lw = math.ceil(ww * 0.208) 107 lh = math.ceil(wh * 0.277) 108 app.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)) ) 109 110 #タイトルを指定 111 app.title("Main Menu") 112 113 #フォームの最大化、×ボタン操作を無効化 114 app.resizable(0,0) 115 app.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) 116 117 118 119 menu_top = Menu(app) 120 menu_file = Menu(menu_top, tearoff=False) 121 menu_open = Menu(menu_top, tearoff=False) 122 123 app.configure(menu=menu_top, bg="#F0FFFF") 124 125 menu_top.add_cascade (label='File(F)', menu=menu_file, underline=0) 126 127 menu_file.add_cascade(label='Open(O)', underline=0, menu=menu_open) 128 menu_open.add_command(label='Sub(S)', underline=0, command="app.openDialog") 129 menu_file.add_command(label='Quit(Q)',underline=0, command=app.quit) 130 131 132 # フレームを作成する 133 frame = Apprication(app) 134 # 格納したTkインスタンスのmainloopで画面を起こす 135 app.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/05 09:17
2020/06/05 10:05
2020/06/05 11:06 編集
2020/06/05 11:45