本記事では、ドロップダウンリストの作成方法が分からない方のために、ドロップダウンリストの作成方法を解説していきます!
ドロップダウンリストは、下図のように選択肢が一覧として表示されるテキストボックスです。
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) |
postcommand | Comboboxの▼をクリックしたときのコールバック関数を指定 |
style | カスタムウィジェットスタイルを指定 |
textvariable | Combobox内に表示させる変数の型を指定 |
values | プルダウンリストに表示するデータを指定 |
font | テキスト文字のフォント、サイズ、太さを指定 |
state | コンボボックスの状態を指定 |
■ heightオプション
ドロップダウンリストに表示するwidgetの高さを指定することができます。
ttk.Combobox ( root , height = 2 )
■ widthオプション
ドロップダウンリストに表示するwidgetの幅を指定することができます。
ttk.Combobox ( root , width = 2)
■ 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 )
■ stateオプション
コンボボックスの状態を指定することができます。
normal: 直接文字の書き込み、選択肢の選択が可能
readonly: 直接文字の書き込み不可、選択肢の選択のみ可能
disabled: 直接文字の書き込み、選択肢の選択不可
ttk.Combobox ( root , state = " normal " )
ttk.Combobox ( root , state = " readonly " )
ttk.Combobox ( root , state = " disabled " )
■ textvariableオプション
Combobox内に表示させる変数の型を指定できます。
variable = tk.StringVar()
textvariableoption = ttk.Combobox ( root , textvariable = variable )
コンボボックスに表示させるテキストの型を指定します。
■ valuesオプション
Comboboxのプルダウンリストに表示するデータを指定できます。
事前にComboboxの選択肢として表示させたい項目をまとめた配列を作成します。
その作成した配列をvaluesオプションの値として入れてあげることでComboboxに選択肢を追加することができます!
option = ["A", "B", "C", "D"]
valuesoption = ttk.Combobox ( root , values = option )
■ fontオプション
fontoption = ttk.Combobox ( root , font = ( "MS Gothic" , 16 , "bold" ) ) #boldを指定すると太字になる
Comboboxで使用できるメソッド一覧
comboboxで使用できるイベント関数
Comboboxの値を操作したい場合に使用できるイベント関数を紹介していきます!
① 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()
コンソールに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()
すると ”2” という値が取得できました。
実際にプルダウンリストに表示される選択肢は上から0番目、1番目、2番目、、、、というナンバリングがされるのでcurrent()を使用することで選択肢の何番目に位置するのかを取得することができました!
☆選択肢にない値の場合
また、選択肢にない値をComboboxに挿入している場合にはcurrent()で返ってくる値は “-1” となるみたいです。
④ delete()
Comboboxに現在選択されている値を削除することができます。
使い方は同じで、削除したいウィジェットに下記のようにして追記してあげるだけです。
combobox.delete()
Combobox が選択された際に、値を取得したい場合
combobox オブジェクトのリストから、選択肢がクリックされた場合に実行したい処理がある場合には bind() を使用します。
bind() では、引数を以下のように指定しています。第一引数では仮想イベント(<<ComboboxSelected>>)を指定します。
ttk.Combobox で定義されている仮想イベントは <<ComboboxSelected>> のみです。
このイベントが行われた際に、実行したい関数を第二引数であるコールバック関数に記載します。そうすることでリストから選択された際に、処理を実行することができるというわけです!
combo.bind ( " <<ComboboxSelected>> " , コールバック関数 )
スポンサーリンク
スポンサーリンク
値が選択された瞬間の値を取得するプログラム
では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()
このように combobox が生成されました!
そして上図のように「車」を選択した場合には、実行結果に「車が選択されました」と表示されていることが分かります。
以上となります。最後まで見ていただきありがとうございました!
Python学習に有効な書籍の紹介もしています!是非参考にしてみてください!
次の記事では、タブ付きウィジェットの作成方法について解説しています。
是非参考にしてみて下さい!