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

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

新規登録して質問してみよう
ただいま回答率
85.48%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Python 3.x

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

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

Q&A

解決済

1回答

622閲覧

Python ラジオボタンのvalue値が変更しない

snowpots

総合スコア1

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Python 3.x

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

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

0グッド

0クリップ

投稿2023/03/08 04:11

編集2023/03/08 06:55

質問文を訂正しました。
よろしくお願いいたします。

実現したいこと

ラジオボタンを選択後、valueの値を変数に入れたい

前提

素人で恐縮ですが、ご質問お願いします。
関数内に、「あり」「なし」の2つのラジオボタンを作成しました。
変数 var に、選択したラジオボタンのvalue値を入れるように記載しました。。
しかし、処理したい関数が離れているためか、
すべて var = 0で返って来てしまいます。

「内服」ボタンクリック→日数表示のラジオボタン(ありorなし)選択→「1.貼付&実行&コピー」ボタンクリック
→print()で変数var確認も、ありorなしのいずれも0になる
→ありをvar=1、なしをvar=0で入れたい。

グローバル変数も試してみましたが、結果は同じでした。
離れた関数で、1つの変数 varを扱うのは難しいでしょうか?

ご教授のほど、よろしくお願いいたします。

Python 3.6, tkinter使用

# root.py ####################################################################### import tkinter from main_1gyou import gyou1_click # ウインドウの作成 root = tkinter.Tk() root.title('Y') root.geometry('270x60+0+920') root.resizable(0, 0) # 色・フォントの設定 normal_font = ('Meiryo UI', 7) bold_font = ('Meiryo UI', 12, 'bold') bg_color = '#87CEFA' button_color = '#468284' root.config(bg=bg_color) # ボタン gyou1_start_button = tkinter.Button(root, text='内服', font=bold_font, fg='black', bg='#c5edcd') gyou1_start_button.place(x=5, y=6, width=80, height=40) # ---------------関数の作成-------------------------------------- def gyou1_start_click(): gyou1_click() # --------------ボタン押し実行処理----------------- gyou1_start_button["command"] = gyou1_start_click # ------------------------------------------------------------- # ウインドウのループ処理 root.attributes("-topmost", True) root.mainloop() #main_1gyou.py################################################################## import tkinter def gyou1_click(): #最初の画面に戻る def return_ykg(): root_gyou1.destroy() g_1gyou = 0 # ウインドウの作成 root_gyou1 = tkinter.Tk() #! root_gyou1.title('【1出力】') #! root_gyou1.geometry('700x700+600+200') #! root_gyou1.resizable(0, 0) #! # 色・フォントの設定 normal_font_gyou1 = ('Arial', 10) normal2_font_gyou1 = ('Meiryo UI', 12) bold_font_gyou1 = ('Meiryo UI', 15, 'bold') bg_color_gyou1 = '#c5edcd' zenmen_bg_color_gyou1 = '#6c3fab' button_color_gyou1 = '#373fd4' root_gyou1.config(bg=bg_color_gyou1) #ラジオボタン frame_date = tkinter.LabelFrame(root_gyou1, text="日数の表示", foreground="green", labelanchor="nw", width=160, height=100, bd=5, bg=bg_color_gyou1, font=bold_font_gyou1) frame_date.propagate(False) # 幅と高さを指定する場合はこの設定が必要 frame_date.place(x=25, y=520) global var var = tkinter.IntVar() var.set(0) radiobutton_1 = tkinter.Radiobutton(frame_date, text='あり', variable=var, value=1, font=bold_font_gyou1, bg=bg_color_gyou1) radiobutton_2 = tkinter.Radiobutton(frame_date, text='なし', variable=var, value=0, font=bold_font_gyou1, bg=bg_color_gyou1) radiobutton_1.place(x=30, y=0) radiobutton_2.place(x=30, y=30) start_button_gyou1 = tkinter.Button(root_gyou1, text='1.貼付&実行&処理', font=bold_font_gyou1, fg='white', bg=button_color_gyou1) start_button_gyou1.place(x=280, y=530, width=200, height=70) # ---------------関数の作成-------------------------------------- # ②実行 def start_click_gyou1(): global var chk = int(var.get()) print(chk) #~~~~~~~~~~~省略~~~~~~~~~~~~~~~ # --------------ボタン押し実行処理----------------- start_button_gyou1["command"] = start_click_gyou1 # ② # ------------------------------------------------------------- # ウインドウのループ処理 root_gyou1.mainloop()

試したこと

1.ラジオボタンの変数 var をグローバル変数に。→すべて0で返る
2.打ち間違いなどの見直し

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

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

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

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

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

melian

2023/03/08 04:41

start_button_gyou1 の定義部分が見当たりませんので、適当に以下のコードを追加して実行してみましたが、「あり」の場合は 1 が、「なし」の場合は 0 が var にセットされます。 start_button_gyou1 = tkinter.Button(root_gyou1, text='ボタン') start_button_gyou1.place(x=100, y=100) こちらの環境は Python 3.10.6/Tkinter 8.6.2 です。
y_waiwai

2023/03/08 05:50

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
snowpots

2023/03/08 06:56

ご回答ありがとうございます。 質問文とコードを修正いたしました。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

main_1gyou.py 側で top-level のウィンドウを作成します。

root.py

python

1def gyou1_start_click(): 2 gyou1_click(root) # pass root window

main_1gyou.py

python

1def gyou1_click(root_win): 2 : 3 4 # トップレベルウインドウの作成 5 root_gyou1 = tkinter.Toplevel(root_win) 6 # root_gyou1 = tkinter.Tk()

投稿2023/03/08 07:39

melian

総合スコア19714

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

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

snowpots

2023/03/08 13:30

ご提示通り修正したところ、完璧に動作しました。 トップレベルウインドウについて、勉強しようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問