Tkinter

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

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

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

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

example of combobox

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

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

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

記事の信頼性

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

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

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オプション

ドロップダウンリストに表示するwidgetの高さを指定することができます。

ttk.Combobox ( root , height = 2 )

widthオプション

ドロップダウンリストに表示するwidgetの幅を指定することができます。

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オプション

コンボボックスの状態を指定することができます。

normal: 直接文字の書き込み、選択肢の選択が可能
readonly: 直接文字の書き込み不可、選択肢の選択のみ可能
disabled: 直接文字の書き込み、選択肢の選択不可

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

combo state

textvariableオプション

Combobox内に表示させる変数の型を指定できます。

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

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

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

valuesオプション

Comboboxのプルダウンリストに表示するデータを指定できます。
事前にComboboxの選択肢として表示させたい項目をまとめた配列を作成します。

その作成した配列をvaluesオプションの値として入れてあげることでComboboxに選択肢を追加することができます!

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

fontオプション

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

combo font

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

Comboboxで使用できるメソッド一覧

comboboxで使用できるイベント関数

Comboboxの値を操作したい場合に使用できるイベント関数を紹介していきます!

setComboboxに値を挿入
getComboboxの現在値を取得
current選択肢に合致するプルダウンリストの位置を取得
deleteComboboxの値を削除

① set()

Comboboxに値を挿入することができます。

下記プログラムでは、set()を用いてComboboxに”A”という値を挿入してみます。

import tkinter as tk
import tkinter.ttk as ttk

def main():
    option = ["A", "B", "C", "D"]  # 選択肢
    combobox=ttk.Combobox(root,values=option)
    combobox.pack()
    combobox.set("A")

if __name__=="__main__":
    root = tk.Tk()
    root.geometry("300x100")
    main()
    root.mainloop()

② get()

Comboboxで現在選択されている選択肢の値を取得することができます。

先ほど使用したset()で指定した”A”という値が取得できるかget()メソッドを試してみます!

import tkinter as tk
import tkinter.ttk as ttk

def main():
    option = ["A", "B", "C", "D"]  # 選択肢
    combobox=ttk.Combobox(root,values=option)
    combobox.pack()
    combobox.set("A")
    print(combobox.get())

if __name__=="__main__":
    root = tk.Tk()
    root.geometry("300x100")
    main()
    root.mainloop()
result of get()

コンソールにComboboxで現在選択されている”A”の値が取得できました!

③ current()

選択肢に合致するプルダウンリストの位置を取得することができます。

試しに、set()で”C”を挿入してcurrent()メソッドを使用してプルダウンリストの何番目に位置する値かを取得してみます。

import tkinter as tk
import tkinter.ttk as ttk

def main():
    option = ["A", "B", "C", "D"]  # 選択肢
    combobox=ttk.Combobox(root,values=option)
    combobox.pack()
    combobox.set("C")
    print(combobox.current())

if __name__=="__main__":
    root = tk.Tk()
    root.geometry("300x100")
    main()
    root.mainloop()
result of current1

すると ”2” という値が取得できました。
実際にプルダウンリストに表示される選択肢は上から0番目、1番目、2番目、、、、というナンバリングがされるのでcurrent()を使用することで選択肢の何番目に位置するのかを取得することができました!

☆選択肢にない値の場合

また、選択肢にない値をComboboxに挿入している場合にはcurrent()で返ってくる値は “-1” となるみたいです。

result of current2

④ delete()

Comboboxに現在選択されている値を削除することができます。

使い方は同じで、削除したいウィジェッに下記のようにして追記してあげるだけです。

combobox.delete()

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学習に有効な書籍の紹介もしています!是非参考にしてみてください!

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

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