Tkinter

[Python/tkinter] Combobox を使ってみよう!

本記事では、ドロップダウンリストの作成方法が分からない方のために、ドロップダウンリストの作成方法を解説していきます!

ドロップダウンリストとは?

ドロップダウンリストは、下図のように選択肢が一覧として表示されるテキストボックスです。

example of combobox

tkinter では、Combobox ウィジェットを用いることでドロップダウン式のリストを表示させることができます。
では実際に使い方を説明していきます!

完成したコードが知りたい方は目次から「完成したプログラム」を押してみてください!

記事の信頼性

自動化アプリケーション作成に携わっている私が、初心者にも分かりやすくプログラミングの基礎を紹介しています。

ブックマークするといつでも確認することができます!

Combobox の使い方

Combobox を使うための準備

Combobox ウィジェットは、通常の tkinter ではなく tkinter.ttk モジュールに用意されているものになります。

そのため事前に ttk モジュールをインポートする必要があります。

import tkinter.ttk as ttk

Combobox の生成

ttk モジュールをインポートしたら次はCombobox リストに表示させたいリストを作成してみましょう。
まずは、 ttk を利用してCombobox のウィジェットを生成します。

    option = ["A", "B", "C", "D"]  # 選択肢
    variable = tk.StringVar ( ) #A~Dが文字列の場合
    combo = ttk.Combobox ( root , values = option , textvariable = variable )

ここで、ウィジェット変数であるA~Dの変数が「文字列」「整数」「浮動小数点」「Boolean値(True,False)」なのかによって変数を指定する必要があります。それぞれ以下のように指定します。

文字列の場合: 
variable = tk.StringVar()

整数の場合: 
variable = tk.IntVar()

浮動小数点の場合: 
variable = tk.DoubleVar()

Boolean値の場合: 
variable = tk.BooleanVar()

ここで ttk.Combobox () の引数は、以下を指定しています。

  • root:オブジェクト名の指定
  • values:表示させたいリストの指定
  • textvariable:Combobox の結果を受け取るための文字列の指定

仕事がはかどるおすすめ参考書

Comboboxのオプション一覧

Combobox で使用できるオプションの一覧を以下の表に示します。

オプション名指定箇所
heightドロップダウンリストに表示する高さの指定
width文字数を指定(横幅)
cursorカーソルがホバーしている時の形状を指定
justifyテキスト文字列の配置方法(LEFT, CENTER, RIGHT)
postcommandComboboxの▼をクリックしたときのコールバック関数を指定
styleカスタムウィジェットスタイルを指定
textvariableCombobox内に表示させる変数の型を指定
valuesリストに表示するデータを指定
fontテキスト文字のフォント、サイズ、太さを指定
stateコンボボックスの状態を指定

■ heightオプション

ttk.Combobox ( root , height = 2 )

widthオプション

ttk.Combobox ( root , width = 2)

combo width

cursorオプション

ttk.Combobox ( root , cursor = " arrow " )
ttk.Combobox ( root , cursor = " hand1 " )
ttk.Combobox ( root , cursor = " hand2 " )
ttk.Combobox ( root , cursor = " star " )
ttk.Combobox ( root , cursor = " dot " )

上記以外にもカーソルの種類はたくさんありますが今回は代表的なモノだけ載せておきます。

justifyオプション

ttk.Combobox ( root , justify = tk.LEFT )
ttk.Combobox ( root , justify = tk.CENTER )
ttk.Combobox ( root , justify = tk.RIGHT )

combo justify

stateオプション

ttk.Combobox ( root , state = " readonly " )
ttk.Combobox ( root , state = " disabled " )

combo state

“disabled” を指定するとコンボボックスの操作ができなくなります。

textvariableオプション

variable = tk.StringVar()
textvariableoption = ttk.Combobox ( root , textvariable = variable )

コンボボックスに表示させるテキストの型を指定します。

  • tk.StringVar():文字列を扱う際に指定(型はStringになるが数字も扱える)
  • tk.IntVar():整数を扱う際に指定

valuesオプション

option = ["A", "B", "C", "D"] 
valuesoption = ttk.Combobox ( root , values = option )

fontオプション

fontoption = ttk.Combobox ( root , font = ( "MS Gothic" , 16 , "bold" ) )   #boldを指定すると太字になる

combo font

MSゴシック以外のフォントを知りたい場合はコチラの記事で確認してみてください!
→ 使用可能なフォント一覧を確認する(フォント一覧を表示させる方法)

Combobox が選択された際に、値を取得する方法

combobox オブジェクトのリストから、選択肢がクリックされた場合に実行したい処理がある場合には bind() を使用します。

bind() では、引数を以下のように指定しています。第一引数では仮想イベント(<<ComboboxSelected>>)を指定します。

今回用いるイベント <<ComboboxSelected>> は、リストから選択肢が選択された場合にイベントを発生させるものです。


ttk.Combobox で定義されている仮想イベントは <<ComboboxSelected>> のみです。

このイベントが行われた際に、実行したい関数を第二引数であるコールバック関数に記載します。

そうすることでリストから選択された際に、処理を実行することができるというわけです!

 combo.bind ( " <<ComboboxSelected>> " , コールバック関数 )

スポンサーリンク

スポンサーリンク

完成したプログラム

eyecatch_mike_cat

ではCombobox を用いて、リストが選択された際に「○○が選択されました!」と表示するプログラムを作成してみましょう!

以下のコードを実行してみて下さい。
本プログラムは、main関数を定義しているため global 関数として combo = str() を指定しています。main 関数を定義しない場合は必要ありません。

import tkinter as tk
from tkinter import *
import tkinter.ttk as ttk

def main():
    global combo
    label1=tk.Label(root,text="通勤手段を入力してください")
    label1.pack()
    option = ["徒歩", "車", "電車", "その他"]  # 選択肢
    variable = tk.StringVar()
    combo=ttk.Combobox(root,values=option,textvariable=variable)
    combo.bind("<<ComboboxSelected>>",combo_selected)
    combo.pack()

def combo_selected(event):
    global combo
    print(combo.get(),"が選択されました")

if __name__=="__main__":
    root = tk.Tk()
    root.geometry("300x100")
    root.title("comboboxのデータ取得")
    combo=str()
    main()
    root.mainloop()

result of combobox1
result of combobox2

このように combobox が生成されました!
そして上図のように「車」を選択した場合には、実行結果に「車が選択されました」と表示されていることが分かります。

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

Python学習に有効な書籍の紹介もしています!是非参考にしてみてください!

[2023年版][難易度別] Python学習にオススメな参考書:厳選9冊!Pythonを勉強する初心者から中級者を対象として、2023年現在で本当に良いと感じた厳選9冊を紹介しています。Pythonの基礎を学べる書籍から、GUI、アプリ作成、機械学習などを学べる書籍まで幅広く紹介しています!レビューも書き込んでいます!...

次の記事では、タブ付きウィジェットの作成方法について解説しています。
是非参考にしてみて下さい!