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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

受付中

TkInter ラジオボタンのグループ単位での、単一選択制御ができない。

Isikoro
Isikoro

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1回答

1評価

0クリップ

39閲覧

投稿2020/06/05 07:51

標題の件、ラジオボタンのグループ管理は variableの設定を 同じ変数を指定することでなされるのではないのでしょうか?
初期値をこちらの記事を参考に対処したつもりですが、
・初期値の設定選択が活きていない
・グループ単位で 単一選択の制御ができない
・クリックではなく、マウスオーバのみで選択になってしまうことがある
問題が生じています。

本来 二つのグループのラジオボタンなので、双方YesもしくはNoのいづれかが選択されているべきなのですが、ご覧の有様です。
どういう対策を投じればよいのでしょうか?
絵

Python

from tkinter import * import tkinter.ttk as ttk import tkinter.scrolledtext as tksc import math class Apprication(ttk.Frame): def __init__(self, app): super().__init__(app) self.pack(fill=BOTH, expand=True) btn1 = ttk.Button(self, text="Sub", command=self.openDialog) btn1.bind('<Return>', self.openDialog) btn1.pack(fill=BOTH, expand=True) btn1.focus_set() btn2 = ttk.Button(self, text="Quit", command=app.quit) btn2.bind('<Return>', lambda _: app.quit()) btn2.pack(fill=BOTH, expand=True) self.menu() def menu(self): menu_top = Menu(app) menu_file = Menu(menu_top, tearoff=False) menu_open = Menu(menu_top, tearoff=False) app.configure(menu=menu_top, bg="#F0FFFF") menu_top.add_cascade (label='File(F)', menu=menu_file, underline=0) menu_file.add_cascade(label='Open(O)', underline=0, menu=menu_open) menu_open.add_command(label='Sub(S)', underline=0, command=self.openDialog) menu_file.add_command(label='Quit(Q)',underline=0, command=app.quit) # 子画面開く def openDialog(self, event=None): self.dialog = Toplevel(self) self.dialog.title("Sub Menu") #フォームサイズを実行端末から導き、ド真中に配置表示 lw = math.ceil(ww * 0.408) lh = math.ceil(wh * 0.477) self.dialog.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)) ) self.dialog.configure(bg="#F0FFFF") self.dialog.resizable(0,0) self.dialog.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) # modalに self.dialog.grab_set() lbfrm1 = LabelFrame(self.dialog, text="Detail setting") lbfrm1.grid(padx=(10,10)) radioValue1 = IntVar() rd1 = Radiobutton(lbfrm1, text="Yes", bg="#F0FFFF", variable=radioValue1, value=1, activebackground="#F0FFFF") rd1.grid(row=1, column=0) radioValue1.set(1) rd2 = Radiobutton(lbfrm1, text="No", bg="#F0FFFF", variable=radioValue1, value=2, activebackground="#F0FFFF") rd2.grid(row=1, column=1) radioValue2 = IntVar() rd3 = Radiobutton(lbfrm1, text="Yes", bg="#F0FFFF", variable=radioValue2, value=1, activebackground="#F0FFFF") rd3.grid(row=1, column=3) radioValue2.set(1) rd4 = Radiobutton(lbfrm1, text="No", bg="#F0FFFF", variable=radioValue2, value=2, activebackground="#F0FFFF") rd4.grid(row=1, column=4) # 閉じるボタン btn3 = Button(self.dialog, text='Quit', command=self.closeDialog, width=10, takefocus=1) btn3.grid(row=5, column=10, pady=10, padx=(0,10)) self.dialog.grid_rowconfigure(1, weight=1) self.dialog.grid_rowconfigure(3, weight=1) self.dialog.grid_columnconfigure(2, weight=1) # 子画面閉じる def closeDialog(self): self.dialog.destroy() if __name__ == '__main__': #世間でいうrootをappとしています app = Tk() #実行端末の画面サイズを取得 ww = app.winfo_screenwidth() wh = app.winfo_screenheight() app.update_idletasks() #フォームサイズを実行端末から導き、ド真中に配置表示 lw = math.ceil(ww * 0.208) lh = math.ceil(wh * 0.277) app.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)) ) #タイトルを指定 app.title("Main Menu") #フォームの最大化、×ボタン操作を無効化 app.resizable(0,0) app.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) menu_top = Menu(app) menu_file = Menu(menu_top, tearoff=False) menu_open = Menu(menu_top, tearoff=False) app.configure(menu=menu_top, bg="#F0FFFF") menu_top.add_cascade (label='File(F)', menu=menu_file, underline=0) menu_file.add_cascade(label='Open(O)', underline=0, menu=menu_open) menu_open.add_command(label='Sub(S)', underline=0, command="app.openDialog") menu_file.add_command(label='Quit(Q)',underline=0, command=app.quit) # フレームを作成する frame = Apprication(app) # 格納したTkインスタンスのmainloopで画面を起こす app.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

asahina1979
asahina1979

2020/06/05 08:44

ちなみに cloneメソッドを呼び出すだけでオーバーライドしなくても複製(ディープコピーできるかは別にして)できるはずだと思い、次のコード(参考書のコードを一部変更)で検証してみました。 は アクセスレベルが protected なので外部ロジックでは複製できなかったりします。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。