Pythonいろいろ

python便利!

Python ラジオボタン の作成 種類ごとに枠線を表示 (tkinter)

今回はラジオボタンを作成したいと思います。そして、ラジオボタンを種類ごとに枠(罫線?)で囲みます。

 

以下の記事のテンプレにラジオボタンを追加したものになります。

 

 

various-python.hatenablog.com

 

今回の記事を読むと以下のような画面が作成できます。

 

f:id:chacha07:20210815202254p:plain

 

 

とりあえず、ソースコードを示します。

 

説明はソースコードの下に書きます!

 


# -*- 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関数については以下の記事をご覧ください。

 

various-python.hatenablog.com

 

 

にほんブログ村 IT技術ブログへ
にほんブログ村