初心者でもPythonを使ってみよう

趣味と実益を兼ねたPython学習記

【スポンサーリンク】



tkinter Radiobuttonの使い方 Python

tkinterで使用できるRadiobuttonウィジェットの使用方法を、実際に簡単なアプリを作成して確認しました。

目次

Radiobuttonの概要

Radiobuttonは、事前に決められた複数の選択肢から、一つだけを選択する際に使用されるウィジェットです。

以下に、ラジオボタンを縦に3つ並べた画面を示します。

f:id:vigilantPotato:20190423210833p:plain

3つのラジオボタンのうち、No.1にチェックが入っています。

No.3のボタンをクリックすると、No.3にチェックが移り、No.1のチェックはなくなります。

f:id:vigilantPotato:20190423211015p:plain

No.2のボタンをクリックしても同様で、常に3つのうち一つのボタンのみ、チェックが入っている状態になります。

※設定によってはすべてのボタンのチェックを外すこともできますが、常にどこかのボタンにチェックを入れておくようにすることが推奨されているようです。

ラジオボタンで主に使用するオプションは、以下の3つです。

  • textオプション

    ラジオボタンの横に表示するラベルを設定するオプション。

  • valueオプション

    ボタンに割り当てる数字や文字列を設定するオプション。 ここで割り当てた値が、ラジオボタンチェック時にvarオプションで設定した変数に格納される。

  • varオプション

    ボタンに割り当てたvalue値を格納する変数を設定するオプション。 整数値の場合は「tkinter.IntVar」、文字列の場合は「tkinter.StringVar」オブジェクトを使用する。

これらのオプションを用いて、どのラジオボタンが選択されているか判定したり、選択した値を表示させたりすることが可能になります。

次は、実際に簡単なアプリを作成し、使い方を確認していきます。

アプリ概要

チェックボタンの選択状態に応じて、各ボタンに設定された値をラベルに表示させるアプリを作成します。

以下に、作成したアプリの外観を示します。

f:id:vigilantPotato:20190423215950p:plain

ラベルの下に、ラジオボタンが3つ並べてあります。

ラジオボタンのNo.1にチェックが付いており、ラベルはその値を表示しています。

No.3にチェックを入れると、No.1のチェックが外れて、ラベルの数字も3に変化します。

f:id:vigilantPotato:20190423220028p:plain

No.2にチェックを入れても同様です。

f:id:vigilantPotato:20190423220103p:plain

チェックボタンの選択状態に応じて、各ボタンに設定された値を表示させることができました。

コードの解説

  • 準備

モジュールのインポートと、tkinterのトップレベルウィジェットを作成します。

今回インポートするモジュールはtkinterのみです。

import tkinter

root = tkinter.Tk()

#変数の設定
#選択値表示用ラベルの設定
#ラジオボタンの設定

root.mainloop()
  • 変数の設定

チェックボタンの状態を格納するための変数を設定します。

変数名は「var」とし、「tkinter.Intvar」オブジェクトを使用します。このオブジェクトは、整数値のみを格納することができます。

var = tkinter.IntVar(
    master=root,
    value=1,
    ) 

この例では、変数の生成時に「value」オプションで初期値を1に設定していますが、「.set()」メソッドを用いて後から設定することも可能です。

例:var.set(1)

  • 選択値表示用ラベルの設定

選択したボタンに対応する値を表示させるためのラベルを作成します。

l = tkinter.Label(
    master=root,
    bg="Lightblue",
    width=10,
    textvariable=var,
    )
l.pack()

「textvariable」オプションに変数「var」を設定することで、ラジオボタンにチェックを入れて「var」の値が変化すると、自動的にラベルのテキストもその値に変化してくれるようになります。

  • ラジオボタンの設定

for文を用いてラジオボタンを3つ作成し、表示させていきます。

for i in range(3):
    r = tkinter.Radiobutton(
        master=root,
        text="No." + str(i+1),
        value=i+1,
        var=var,
        )
    r.pack()

オブジェクト生成時に、以下のオプションを用いて各種設定を行っています。

  • textオプション:ボタンのタイトルを設定
  • valueオプション:選択時に変数varにセットする値を設定
  • varオプション:先ほど作成した変数「var」を設定

この設定をすることで、ラジオボタンを選択時に、valueオプションで設定した数値が変数「var」に格納されるようになります。

文字列を使用する場合

今回の例では、各ラジオボタンの設定値を整数にしましたが、文字列を設定することも可能です。

文字列用に修正したアプリの外観を示します。

f:id:vigilantPotato:20190423221447p:plain

先ほどはラベルに整数値が表示されていましたが、今回は文字列になっています。

文字列を使用するには、変数の設定とラジオボタンの設定を以下の通りに変更する必要があります。

  • 変数の設定(文字列用)
var = tkinter.StringVar(
    master=root,
    value="No.1",
    ) 

文字列を使用する場合は、「IntVar」の代わりに「StringVar」オブジェクトを使用します。

  • ラジオボタンの設定(文字列用)
for i in range(3):
    r = tkinter.Radiobutton(
        master=root,
        text="No." + str(i+1),
        value="No." + str(i+1),
        var=var,
        )
    r.pack()

「value」を文字列に変更しています。

コード全文

  • 整数使用時
import tkinter

root = tkinter.Tk()

#変数の設定
var = tkinter.IntVar(
    master=root,
    value=1,
    ) 

#選択値表示用ラベルの設定
l = tkinter.Label(
    master=root,
    bg="Lightblue",
    width=10,
    textvariable=var,
    )
l.pack()

#ラジオボタンの設定
for i in range(3):
    r = tkinter.Radiobutton(
        master=root,
        text="No." + str(i+1),
        value=i+1,
        var=var,
        )
    r.pack()

root.mainloop()
  • 文字列使用時
import tkinter

root = tkinter.Tk()

#変数の設定(文字列)
var = tkinter.StringVar(
    master=root,
    value="No.1",
    ) 

#選択値表示用ラベルの設定
l = tkinter.Label(
    master=root,
    bg="Lightblue",
    width=10,
    textvariable=var,
    )
l.pack()

#ラジオボタンの設定(文字列)
for i in range(3):
    r = tkinter.Radiobutton(
        master=root,
        text="No." + str(i+1),
        value="No." + str(i+1),
        var=var,
        )
    r.pack()

root.mainloop()