Python

[Tkinter] OptionMenuを使って選択肢を表示/取得できるボタンを作成する方法!

Tkinterでは、リストボックス以外にも下図のように選択肢を一覧として表示させるOptionMenuというメソッドがあります。

今回はこのウィジェットの作成方法を解説していきたいと思います!

  • 転職のためのスキルアップとして効率的に学びたい
  • 副業としてプログラミングができるようになりたい
  • 独学での勉強に限界を感じている

これらに該当する方はプログラミングスクールがスキルアップの近道です!
是非参考にしてみてください。

【2023年最新】プログラミング上達の近道とは?スクールに通うメリットやおすすめランキングも徹底解説!プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています!特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...

未経験でも安心!
学生30代の方にもおすすめなプログラミングスクールがあります

OptionMenuメソッドの使い方

まずは、OptionMenuメソッドの使い方についてです。下記のように引数を指定してあげることでOptionMenuウィジェットを作成することができます。

間違いがあったらすみません。

tk.OptionMenu(master, variable, *values, **kwargs)

master: OptionMenuを配置したいウィジェット名を指定


variable: 変数の型を指定。
  StringVar():文字列
  IntVar():整数
  DoubleVar():浮動小数点
  BooleanVar():ブール値(True:1、False:0)


values: 選択肢リストを渡す。

すらいむ管理人

具体的な使い方は次の項で説明してきます!

OptionMenuを使用したプログラム

では、実際にOptionMenu() メソッドを使ってみましょう。

今回は通勤手段を選択できるようなボタンを作成してみます!

import tkinter as tk

def display_selected(choice):
    choice = variable.get()
    print(choice)

root = tk.Tk()
root.geometry("200x100")

# 選択肢リストを作成
way_list = ['公共交通機関','自家用車', 'バイク','徒歩']
# 選択肢リストの型を指定
variable = tk.StringVar()
variable.set(way_list)
# OptionMenu作成
option_button = tk.OptionMenu(
    root,
    variable,
    *way_list,
    command=display_selected
)
# ウィジェット配置
option_button.pack()
root.mainloop()

ここで、このままだと選択肢すべてがオプションボタンに表示されてしまっていると思います。表示する選択肢を1つに絞りたい場合には、variable.set()で指定します。

variable.set(way_list)」の部分を「variable.set(way_list)」に変更してみてください。


すると下記のように表示されると思います。

option menu result

すらいむ管理人

OptionMenuボタンを作成することができました。
ここで選んだ選択肢はコンソール画面にも表示されていると思います!

ここでは、まず way_list[] に選択肢として表示させたいものを格納します。その後、その格納した変数の型に合うものを variable に指定しています。

variable.set()でオプションメニューボタンに初期値として表示させておきたい選択肢を指定しています。
今回はway_listとしているので初期値として徒歩が表示されるプログラムになっています。

今回はリストのデータが文字列のため tk.StringVar() を指定しています。

リスト内のデータを整数型や浮動小数点型などにしたい場合は適宜、先ほど示したデータ型に変更してあげる必要があります。

また、OptionMenu() の引数としてcommandを指定してあげることで選択肢が選択された際に関数が実行されるようにしています。

選択した内容を取得する方法

上述したプログラムでは、ユーザーがOptionMenuボタンから選んだ選択肢の情報を取得し、コンソール画面に表示させるようになっています。

ここで選択した内容を取得するために、.get() メソッドを使用しています。

def display_selected(choice):
    # 情報を取得
    choice = variable.get()
    # 選択内容を表示
    print(choice)

OptionMenuのその他のオプション

OptionMenuウィジェットには、背景やテキストの色を変えたり、幅や高さを変更したりなど種々のオプションがあります。

ただし、OptionMenuのオプションを使用する場合にはオプションをそのまま引数に加えて使用することができないので config() メソッドを使用します。

ウィジェットの幅や高さなどの基本的なオプションはボタン配置についてフォントの指定方法という記事で紹介していますのでこちらを参考にしてみてください!

すらいむ管理人

その他、OptionMenuに対して使用できるオプションを紹介していきます!

activeforegroundウィジェットがフォーカスされている時の文字色を指定
disableforegroundウィジェットがフォーカスされていない時の文字色を指定
direction選択肢を表示する位置を指定
wraplength文字列を折り返したい場合
image選択肢に画像を張り付ける場合

OptionButton = tk.OptionMenu()


#activeforeground : フォーカスされている際のウィジェット色を指定
OptionButton.config(activeforeground = "Red")  #カラーコードを指定

#disabledforeground : 未選択の場合のウィジェットの色を指定
OptionButton.config(activeforeground = "Green")  #カラーコードを指定

#direction : 選択肢表示位置を指定
OptionButton.config(direction = "above")    # 上
OptionButton.config(direction = "below")    # 下
OptionButton.config(direction = "left")        # 左
OptionButton.config(direction = "right")      # 右

#wraplength : 選択肢の文字列を折り返したい場合に指定
OptionMenu.config(wraplength = 100)   #幅を数値で指定

#image : 選択肢に画像を張り付ける場合
image = tk.PhotoImage( file = "画像のパスを指定" )
OptionButton.config(image = image, compound = tk.TOP)          #文字列を上に表示
OptionButton.config(image = image, compound = tk.BOTTOM)   #文字列を下に表示
OptionButton.config(image = image, compound = tk.LEFT)        #文字列を左に表示
OptionButton.config(image = image, compound = tk.RIGHT)      #文字列を右に表示
OptionButton.config(image = image, compound = tk.CENTER)    #文字列を真ん中に表示

以上となります!
最後まで見ていただきありがとうございました。