Python ラジオボタン の作成 種類ごとに枠線を表示 (tkinter)
今回はラジオボタンを作成したいと思います。そして、ラジオボタンを種類ごとに枠(罫線?)で囲みます。
以下の記事のテンプレにラジオボタンを追加したものになります。
今回の記事を読むと以下のような画面が作成できます。
とりあえず、ソースコードを示します。
説明はソースコードの下に書きます!
# -*- coding: utf-8 -*-
import tkinter
from tkinter import messagebox
import sys
import os
def main_proc():
global root
#Retreive InputForm Data
textdata=txt.get("1.0","end")
#None Data
if len(textdata)==1:
messagebox.showinfo("Invalid Data", "入力してください。")
return
#Get Radio Button Value
radiobt = rad_val.get()
radiobt2 = rad_val2.get()
flag=radiobt+radiobt2
#Change your processing
messagebox.showinfo("title", textdata+"\n"+"radio flag = "+str(flag))
root.destroy()
sys.exit()
def temp_path(relative_path):
try:
#Retrieve Temp Path
base_path = sys._MEIPASS
except Exception:
#Retrieve Current Path Then Error
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
#logo=temp_path('test_icon.ico')
root=tkinter.Tk()
#Display Size
root.geometry('490x280')
#Title Bar
root.title('test')
#Icon
#root.iconbitmap(default=logo)
#Label
lb=tkinter.Label(root,text="入力してください。")
lb.pack(pady=10)
lb.place(x=30,y=10)
#InputForm
txt=tkinter.Text(root,width=30,height=10)
txt.pack(padx=10,pady=10)
txt.place(x=30,y=60)
#Exec Button
btn=tkinter.Button(root,height=1,width=10,text="検索",command=main_proc)
btn.pack(padx=10,pady=10)
btn.place(x=200,y=220)
#Label Frame
frame = tkinter.LabelFrame(root,text="ラベルフレーム1",relief="ridge",bd=2)
frame.pack(pady=10)
frame.place(x=300,y=10)
#Radio Button
rad_val = tkinter.IntVar()
rad_val.set(False)
rd = tkinter.Radiobutton(frame, variable=rad_val, value = 10,text="A")
rd.pack(anchor=tkinter.W)
rd2 = tkinter.Radiobutton(frame, variable=rad_val, value = 20,text="B")
rd2.pack(anchor=tkinter.W)
rad_val.set(10)#default value
#Label Frame2
frame2 = tkinter.LabelFrame(root,text="ラベルフレーム2",relief="ridge",bd=2)
frame2.pack(pady=10)
frame2.place(x=300,y=100)
#Radio Button2
rad_val2 = tkinter.IntVar()
rad_val2.set(False)
rad = tkinter.Radiobutton(frame2, variable=rad_val2, value = 1,text="1")
rad.grid(row=1, column=1,padx=5, pady=5)
rad2 = tkinter.Radiobutton(frame2, variable=rad_val2, value = 2,text="2")
rad2.grid(row=1, column=2,padx=5, pady=5)
rad3 = tkinter.Radiobutton(frame2, variable=rad_val2, value = 3,text="3")
rad3.grid(row=2, column=1,padx=5, pady=5)
rad4 = tkinter.Radiobutton(frame2, variable=rad_val2, value = 4,text="4")
rad4.grid(row=2, column=2,padx=5, pady=5)
rad_val2.set(2)#default value
root.mainloop()
root.quit()
ではソースコードの説明をします。
ボタンを囲う枠の作成
まず、tkinter.LabelFrameでルートウィンドにラベルフレームの作成(#Label Frameのところ)を行っています。
ラベルフレームというのは、ラジオボタンを囲っている枠(罫線)です。
そして、frame.pack,placeで枠線周りの余白及び枠線のルートウィンドへの設置位置を指定しています。
ラジオボタンの作成
tkinter.Radiobuttonでラジオボタンを作成するのですがその前に、tkinter.IntVarでラジオボタンで指定した値を受け取るための変数(rad_val)を作成します。
その後、先ほど作成した、ラベルフレームにtkinter.Radiobuttonでラジオボタンを作成します。引数は以下のとおりです。
第一引数 : 作成したラベルフレーム
variable : kinter.IntVarで作成した変数(rad_val)指定
value : このラジオボタンを選択したときにrad_valに格納される値
text : ラジオボタンに表示されるテキスト
作成するラジオボタンの数だけtkinter.Radiobuttonを記入。複数のラジオボタンを同じグループにしたいときはvariable引数に同じ変数を指定しましょう。
また、第一引数に指定したラベルフレームの場所にラジオボタンが表示されますので、注意しましょう。
ラジオボタンの値の取得
radiobt = rad_val.get()
radiobt2 = rad_val2.get()
上の二行でラジオボタンの値を取得することで、どのボタンが選ばれたかを取得しています。
補足
今回はアイコンを用意してないので、「root.iconbitmap(default=logo)」のところを「#」でコメントアウトしています。なので、temp_path関数は消してもらって構いません。
temp_path関数については以下の記事をご覧ください。