【サンプルコード付】Tkinterで使われるlistboxに関して徹底解説!?
今回はTkinterで使われるlistboxに関して、サンプルコードを交えて徹底解説いたします。listboxに関して学びたい、実践的なコードを用いてlistboxを知りたい方へおすすめです。ぜひ最後までご一読ください。
- そもそもTkinterで使われるlistboxとは?
- 下準備
- Tkinterで活用されるlistbox Widgetの定義
- listbox Widgetで活用される9種類の関数
- 選択肢が選択されるタイミングで、関数を実行する
- まとめ
- 参考文献
執筆者 - おすすめの記事3選
そもそもTkinterで使われるlistboxとは?
Tkinterで使われるlistboxとは、Widgetの一種で、複数の選択肢の中から、1つ以上を選ぶときに使われる入力フォーム を意味します。
Web上でアンケートや会員登録する場面で使われ、別名listbox Widgetと呼ばれます。
知らない言葉がいくつか出てきましたね。。以下の「Tkinterの構成要素」を確認しながら、理解を深めましょう。
Tkinterの構成要素
Tkinterの構成要素として、Window, Frame, Widgetの概念が存在します。
名称 | 説明文 |
---|---|
Window | 画像の紫色枠の部分になります。Tkinter画面全体を表します。 |
Frame | 画像内のオレンジ色枠の部分になります。Widgetが1つ以上ある場合に、取りまとめるものです。 |
Widget | 緑色枠 or 青色枠で囲まれる部分になります。1つの機能を持つ最小単位 = Widgetと考えると良いでしょう。 |
前の章でTkinterで活用されるlistboxとは、Widgetの一種で、複数の選択肢の中から、1つ以上を選ぶときに使われる入力フォームとお伝えしました。
「Tkinterの構成要素」の画像内では、青色枠に該当するWidgetに対して、編集することになります。
Tkinterの構成要素を理解したところで、実際にlistboxの活用方法を理解していきましょう。
緑色枠の部分もWidgetなので編集対象だと考える方もいるかもしれません。緑色枠の部分はWidgetではあるけれども、buttonを表すWidgetですので、今回は編集対象から外れることになります。
下準備
今回は先ほど紹介した「Tkinterの構成要素」の画像を元に、listboxの使い方をお伝えします。
下にコードを貼り付けておきますので、画像と見比べながら、コードを確認してみてください。できればコードに触れて、一緒にlistboxを実装しましょう。
1import tkinter as tk
2
3class Application(tk.Frame):
4 # listboxに関する情報を格納する変数
5 listBox = None
6
7 # 現在選択中のindex(位置番号)を取得する関数
8 def getSelect(self):
9 # curselection() : 現在選択中のindex(位置番号)を取得。
10 print(self.listBox.curselection())
11
12 # 引数へindex(位置番号)を指定して、選択肢が確認できる位置へ移動する関数
13 def setSee(self):
14 # see() : 引数へindex(位置番号)を指定して、選択肢が確認できる位置へ移動する。
15 # index(位置番号)は0から数える。
16 # see(11) : 上から12番目の選択肢が確認できる位置へ移動する。
17 self.listBox.see(11)
18
19 def __init__(self, master=None):
20 # Windowの初期設定を行う。
21 super().__init__(master)
22
23 # Windowの画面サイズを設定する。
24 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
25 self.master.geometry("300x200")
26
27 # Windowを親要素として、frame Widget(Frame)を作成する。
28 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
29 frame = tk.Frame(self.master)
30
31 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
32 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
33 frame.pack()
34
35 # frame Widget(Frame)を親要素として、listbox Widgetを作成する。
36 # height : 選択肢の表示数を設定
37 self.listBox = tk.Listbox(frame, height=5)
38 for month in ("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"):
39 # listboxへ選択肢を格納する。
40 # insert : listbox内の指定箇所(index(位置番号))へ、選択肢を格納する。
41 # tk.END : 末尾を表す。
42 self.listBox.insert(tk.END, month)
43
44 # frame Widget(Frame)を親要素とした場合に、listbox Widgetをどのように配置するのか?
45 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
46 self.listBox.pack()
47
48 # frame Widget(Frame)を親要素として、button Widgetを作成する。
49 # text : テキスト情報
50 # width : ボタンの幅設定
51 # command : ボタンをクリックした場合に、実行する関数を設定する。self.getSelectとする。
52 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
53 checkSelectButton = tk.Button(frame, text="選択確認", width=15, command=self.getSelect)
54
55 # frame Widget(Frame)を親要素とした場合に、button Widgetをどのように配置するのか?
56 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
57 checkSelectButton.pack(side=tk.LEFT)
58
59 # frame Widget(Frame)を親要素として、button Widgetを作成する。
60 # text : テキスト情報
61 # width : ボタンの幅設定
62 # command : ボタンをクリックした場合に、実行する関数を設定する。self.setSeeとする。
63 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
64 moveButton = tk.Button(frame, text="移動", width=15, command=self.setSee)
65
66 # frame Widget(Frame)を親要素とした場合に、button Widgetをどのように配置するのか?
67 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
68 moveButton.pack(side=tk.LEFT)
69
70# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
71if __name__ == "__main__":
72 # Windowを生成する。
73 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
74 root = tk.Tk()
75 app = Application(master=root)
76 # Windowをループさせて、継続的にWindow表示させる。
77 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
78 app.mainloop()
上記のコードをPython環境で実行すると、「Tkinterの構成要素」で紹介した画像の結果が表示されます。
Tkinterで活用されるlistbox Widgetの定義
listbox Widgetは、
1tk.Listbox(option1, option2, ...) or tk.Listbox('親要素', option1, option2, ...)
で定義されます。
listbox Widgetで使われるoptionの種類としては
- background, bg
- fg, foreground
- width, height
- borderwidth, bd
- cursor
- font
- relief
- highlightcolor, highlightbackground, highlightthickness
- justify
- selectbackground
- selectborderwidth
- selectforeground
- exportselection
- state
- disabledforeground
- activestyle
- selectmode
- xscrollcommand, yscrollcommand
があります。順番に見ていきましょう。
※ optionの種類一覧を調べたい場合は、以下のようにコードを記述してご確認ください。
1import tkinter as tk
2
3# listboxを生成する。
4listbox = tk.Listbox()
5# listboxに関するoptionの種類一覧を取得する。
6print(listbox.keys())
background, bg
background option, bg optionを利用すると、listbox Widgetの背景色を設定できます。
backgroundとbg両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
色に関しては、Tkinterの色の使い方とは?活用例から色の一覧をまとめて紹介!?で総括していますので、詳しく知りたい方は是非ご確認ください。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, bg="red") or self.listBox.configure(height=5, bg="red")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.listBox = tk.Listbox(frame, height=5, bg="red")
以下の画像のようにlistbox Widgetを描画します。
fg, foreground
fg option, foreground optionを利用すると、選択肢の文字列色を変更できます。
fgとforeground両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, foreground="green") or self.listBox.configure(height=5, foreground="green")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.listBox = tk.Listbox(frame, height=5, foreground="green")
以下の画像のようにlistbox Widgetを描画します。
width, height
width option, height optionを利用すると、それぞれ1行あたりに表示可能な文字数・選択肢の表示数を設定できます。
デフォルトとしてwidth=20(1行あたり20文字を表示), height=10(選択肢を10項目表示)が設定されています。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=8, width=30) or self.listBox.configure(height=8, width=30)
4##################################
5self.listBox = tk.Listbox(frame, height=8, width=30)
以下の画像のようにlistbox Widgetを描画します。
borderwidth, bd
borderwidth option, bd optionを利用すると、listbox Widgetの枠の大きさを設定できます。
borderwidthとbd両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, bd=50) or self.listBox.configure(height=5, bd=50)
4##################################
5self.listBox = tk.Listbox(frame, height=5, bd=50)
以下の画像のようにlistbox Widgetを描画します。
cursor
cursor optionを利用すると、listbox Widget内へマウスカーソルを移動すると矢印の見た目を変化できます。
見た目のバリエーションについてはこちらのサイトにまとまっていますので、ご確認ください。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更して、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, cursor="clock") or self.listBox.configure(height=5, cursor="clock")
4##################################
5self.listBox = tk.Listbox(frame, height=5, cursor="clock")
listbox Widget内へマウスカーソルを移動すると、矢印の見た目が変更します。
font
font optionを利用すると、文字の形式や大きさを変更できます。
fontに関しては、Tkinterで使われるフォントって?2種類のフォントの設定方法を丁寧に解説でまとめておりますので、詳しく知りたい方は是非ご確認ください。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, font=("", 20, "underline")) or self.listBox.configure(height=5, font=("", 20, "underline"))
4##################################
5# fontについて : https://kuroro.blog/python/RZNjLl36upkumxwkTRWl/
6self.listBox = tk.Listbox(frame, height=5, font=("", 20, "underline"))
以下の画像のようにlistbox Widgetを描画します。
relief
relief optionを設定すると、listbox Widgetの枠のデザインを設定できます。
指定方法としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
例えば下準備コードを、以下のように変更すると、
1+ reliefList = [tk.RAISED, tk.SUNKEN, tk.FLAT, tk.RIDGE, tk.GROOVE, tk.SOLID]
2+ for relief in reliefList:
3- self.listBox = tk.Listbox(frame, height=5)
4+ self.listBox = tk.Listbox(frame, width=5, height=5, bd=20, relief=relief)
5 for month in ("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"):
6 self.listBox.insert(tk.END, month)
7- self.listBox.pack()
8+ self.listBox.pack(side=tk.LEFT)
以下の画像のようにlistbox Widgetを描画します。
highlightcolor, highlightbackground, highlightthickness
highlightcolor option, highlightbackground option, highlightthickness optionを利用すると、それぞれfocusがあてられた時の囲い線の色, focusが外れた時の囲い線の色(デフォルト), 囲い線の太さを設定します。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, highlightthickness=20, highlightbackground="red") or self.listBox.configure(height=5, highlightthickness=20, highlightbackground="red")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.listBox = tk.Listbox(frame, height=5, highlightthickness=20, highlightbackground="red")
以下の画像のようにlistbox Widgetを描画します。
また下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
2self.listBox = tk.Listbox(frame, height=5, highlightthickness=20, highlightcolor="blue")
3# listbox Widgetへfocusを与える。
4self.listBox.focus()
以下の画像のようにlistbox Widgetを描画します。
justify
justify optionを利用すると、listbox Widgetで利用する選択肢を、どちらに揃えるか設定できます。
指定方法としては、
- tk.LEFT : 左寄せ(デフォルト)
- tk.CENTER : 中央寄せ
- tk.RIGHT : 右寄せ
の3種類があります。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, justify=tk.RIGHT) or self.listBox.configure(height=5, justify=tk.RIGHT)
4##################################
5self.listBox = tk.Listbox(frame, height=5, justify=tk.RIGHT)
以下の画像のようにlistbox Widgetを描画します。
selectbackground
selectbackground optionを利用すると、選択された選択肢の背景色を変更できます。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, selectbackground="red") or self.listBox.configure(height=5, selectbackground="red")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.listBox = tk.Listbox(frame, height=5, selectbackground="red")
以下の画像のようにlistbox Widgetを描画します。
selectborderwidth
selectborderwidth optionを利用すると、選択肢を選択できる幅を変更できます。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, selectborderwidth=10) or self.listBox.configure(height=5, selectborderwidth=10)
4##################################
5self.listBox = tk.Listbox(frame, height=5, selectborderwidth=10)
以下の画像のようにlistbox Widgetを描画します。
selectforeground
selectforeground optionを利用すると、選択された選択肢の文字列色を変更できます。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, selectforeground="red") or self.listBox.configure(height=5, selectforeground="red")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.listBox = tk.Listbox(frame, height=5, selectforeground="red")
以下の画像のようにlistbox Widgetを描画します。
exportselection
exportselection optionを利用すると、選択された文字列を、データとして記憶させるべきか設定できます。
値としてboolean(True, False)の指定が可能で、デフォルトではTrue(データとして記憶する)になります。
例えば下準備コードを以下のように変更し、
1 def getSelect(self):
2+ # 現在選択中の文字列を取得する。
3+ print(self.listBox.selection_get())
4 # curselection() : 現在選択中のindex(位置番号)を取得。
5 print(self.listBox.curselection())
6
7 def __init__(self, master=None):
8+ # exportselection=Falseへ変更する。
9- self.listBox = tk.Listbox(frame, height=5)
10+ self.listBox = tk.Listbox(frame, height=5, exportselection=False)
「選択確認」ボタンをクリックすると、# _tkinter.TclError: PRIMARY selection doesn't exist or form "STRING" not defined
のエラーがターミナルに表示されます。
state
state optionを利用すると、listbox Widgetの状態を設定できます。
指定方法としては、
- normal : 選択を有効(デフォルト)
- disabled : 選択を無効
があります。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, state="disabled") or self.listBox.configure(height=5, state="disabled")
4##################################
5self.listBox = tk.Listbox(frame, height=5, state="disabled")
以下の画像のようにlistbox Widgetを描画します。
disabledforeground
disabledforeground optionを利用すると、stateが"disabled"の場合の文字列色を変更できます。
※ 2021年6月21日現在、筆者のMac OSではdisabledforeground optionを指定しても、stateが"disabled"の場合の文字列色を変更できませんでした。
activestyle
activestyle optionを利用すると、選択されている選択肢のデザインを変更できます。
指定方法としては、
- tk.DOTBOX : 選択項目を点線で囲む(デフォルト)
- tk.NONE : 何も装飾しない
- tk.UNDERLINE : 選択項目に下線を引く
の3種類があります。
例えば下準備コードのself.listBox = tk.Listbox(frame, height=5)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.listBox = tk.Listbox(frame)
3# self.listBox.config(height=5, activestyle=tk.UNDERLINE) or self.listBox.configure(height=5, activestyle=tk.UNDERLINE)
4##################################
5self.listBox = tk.Listbox(frame, height=5, activestyle=tk.UNDERLINE)
以下の画像のようにlistbox Widgetを描画します。
selectmode
selectmode optionを利用すると、listbox Widgetの選択方法を変更できます。
指定方法としては、
値 | 機能 |
---|---|
selectmode=tk.SINGLE | 1項目のみ選択可。クリックのみで選択項目を変更可能。 |
selectmode=tk.BROWSE | 1項目のみ選択可。クリック、方向キーで選択項目を変更可能(デフォルト) |
selectmode=tk.MULTIPLE | 複数項目選択可。クリック、スペースキーで選択項目を変更可能。 |
selectmode=tk.EXTENDED | 複数項目選択可。クリック、方向キーで選択可能。shiftキーを押しながら、方向キーを選択すると、複数選択できる。 |
の4種類があります。
xscrollcommand, yscrollcommand
xscrollcommand option, yscrollcommand optionに関しては、Tkinterで使われるscrollbarとは?活用事例を交えて徹底解説の「その他のWidgetを使った、scrollbar Widgetサンプル集」でまとめておりますので、是非ご確認ください。
listbox Widgetで活用される9種類の関数
listbox Widgetで活用される関数として、
- curselection
- delete
- get
- insert
- see
- selection_set, select_set
- select_clear, selection_clear
- selection_includes, select_includes
- size
の9種類が存在します。順に見ていきましょう。
curselection
curselection関数を利用すると、現在選択している選択肢の、index(位置番号)を取得できます。
要するに上から(0から)数えて何番目に、現在選択している選択肢があるのかを教えてくれます。
1.curselection()
で定義されます。
戻り値として、(現在選択している選択肢1のindex(位置番号), 現在選択している選択肢2のindex(位置番号), ...)で返されます。選択されるものがない場合は、()で返されます。
例えば、下準備の章で紹介したコードをPython環境で実行し、listbox Widgetの選択肢をクリックして「選択確認」ボタンを押すと、以下の画像のように表示されます。
delete
delete関数を利用すると、1つ以上の選択肢を削除できます。
1# 単数の選択肢を削除する場合
2# 第一引数 : 削除したい選択肢のindex(位置番号)
3.delete("index(位置番号)")
4
5# 複数の選択肢を削除する場合
6# 第一引数 : 削除したい選択肢の始まりindex(位置番号)
7# 第二引数 : 削除したい選択肢の終わりindex(位置番号)
8.delete("始まりindex(位置番号)", "終わりindex(位置番号)")
で定義されます。戻り値はありません。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.delete(0)
以下の画像のようにlistbox Widgetの選択肢から「1月」が削除されます。
また下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.delete(0, 4)
以下の画像のようにlistbox Widgetの選択肢から「1月~5月」が削除されます。
get
get関数を利用すると、1つ以上の選択肢の値を取得できます。
1# 単数の選択肢の値を取得する場合
2# 第一引数 : 取得したい選択肢のindex(位置番号)
3.get("index(位置番号)")
4
5# 複数の選択肢の値を取得する場合
6# 第一引数 : 取得したい選択肢の始まりindex(位置番号)
7# 第二引数 : 取得したい選択肢の終わりindex(位置番号)
8.get("始まりindex(位置番号)", "終わりindex(位置番号)")
で定義されます。戻り値はありません。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ print(self.listBox.get(0))
以下の画像のように「1月」が表示されます。
また下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ print(self.listBox.get(0, 4))
以下の画像のように「1月~5月」が取得されます。
insert
insert関数を利用すると、1つ以上の選択肢を追加できます。
1# 単数の選択肢を挿入する場合
2# 第一引数 : 挿入したい選択肢先のindex(位置番号)
3# 第二引数 : 選択肢
4.insert("index(位置番号)", "選択肢")
5
6# 複数の選択肢を挿入する場合
7# 第一引数 : 挿入したい選択肢先のindex(位置番号)
8# 第二引数以降 : 選択肢1, 選択肢2, ...
9.insert("index(位置番号)", "選択肢1", "選択肢2", ...)
で定義されます。戻り値はありません。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.insert(0, "test")
以下の画像のように「1月」の上へtestの選択肢が追加されます。
また下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.insert(0, "test1", "test2")
以下の画像のように「1月」の上にtest1, test2の選択肢が追加されます。
see
see関数を利用すると、選択肢が確認できる位置へ移動できます。
1# 選択肢が確認できる位置へ移動する関数
2# 第一引数 : 確認したい選択肢のindex(位置番号)
3.see("index(位置番号)")
で定義されます。戻り値はありません。
例えば、下準備の章で紹介したコードをPython環境で実行し、「移動」ボタンを押すと、以下の画像のように「12月」の選択肢が確認できる位置へ移動します。
selection_set, select_set
selection_set, select_set関数を利用すると、1つ以上の選択肢を選択できます。
1# 単数の選択肢を選択する場合
2# 第一引数 : 選択したい選択肢のindex(位置番号)
3.select_set("index(位置番号)") or .selection_set("index(位置番号)")
4
5# 複数の選択肢を選択する場合
6# 第一引数 : 選択したい選択肢の始まりindex(位置番号)
7# 第二引数 : 選択したい選択肢の終わりindex(位置番号)
8.select_set("始まりindex(位置番号)", "終わりindex(位置番号)") or .selection_set("始まりindex(位置番号)", "終わりindex(位置番号)")
で定義されます。戻り値はありません。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.selection_set(1)
以下の画像のように「2月」が選択されます。
また下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.selection_set(1, 2)
以下の画像のように「2月、3月」が選択されます。
select_clear, selection_clear
select_clear, selection_clear関数を利用すると、1つ以上の選択肢の選択をクリア(解除)できます。
1# 単数の選択肢をクリア(解除)する場合
2# 第一引数 : クリア(解除)したい選択肢のindex(位置番号)
3.select_clear("index(位置番号)") or .selection_clear("index(位置番号)")
4
5# 複数の選択肢をクリア(解除)する場合
6# 第一引数 : クリア(解除)したい選択肢の始まりindex(位置番号)
7# 第二引数 : クリア(解除)したい選択肢の終わりindex(位置番号)
8.select_clear("始まりindex(位置番号)", "終わりindex(位置番号)") or .select_clear("始まりindex(位置番号)", "終わりindex(位置番号)")
で定義されます。戻り値はありません。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.select_set(1, 2)
5+ self.listBox.select_clear(1)
以下の画像のように「2月、3月」が選択されて、「2月」の選択が解除されます。
また下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ self.listBox.select_set(1, 3)
5+ self.listBox.select_clear(1, 2)
以下の画像のように「2月、3月、4月」が選択されて、「2月、3月」の選択が解除されます。
selection_includes, select_includes
selection_includes, select_includes関数を利用すると、指定するindex(位置番号)が、現在選択されているのか判定できます。
1# 指定するindex(位置番号)が、現在選択されているのか確認する関数
2# 第一引数 : 選択されているのか確認したい、選択肢のindex(位置番号)
3.selection_includes("index(位置番号)") or .select_includes("index(位置番号)")
で定義されます。戻り値としては、True(現在選択されている) or False(現在選択されていない)を返します。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ print(self.listBox.selection_includes(1))
以下の画像のように「2月」は現在選択されていないので、Falseが返されます。
size
size関数を利用すると、選択肢の数を取得できます。
1.size()
で定義されます。戻り値として数値(選択肢の数)が返されます。
例えば下準備コードのself.listBox.pack()
の下へ、以下のコードを追加すると、
1def __init__(self, master=None):
2 ...
3 self.listBox.pack()
4+ print(self.listBox.size())
以下の画像のように「1月~12月」の選択肢の数、12が取得できます。
選択肢が選択されるタイミングで、関数を実行する
選択肢が選択されるタイミングに、関数を実行したい場合もあるかと思います。
タイミングを合わせて関数を実行するためには、bind関数の利用が必要です。
例えば下準備コードを以下のように変更し、
1- def getSelect(self):
2+ def getSelect(self, event):
3
4 def __init__(self, master=None):
5 ...
6 self.listBox.pack()
7+ # bind関数について : https://kuroro.blog/python/eI5ApJE1wkU7bHsuwk0H/
8+ self.listBox.bind('<<ListboxSelect>>', self.getSelect)
Python環境で実行して、listbox Widgetの選択肢を選択します。
すると、選択と同時にself.getSelect関数が実行されて、以下の画像のように現在選択中のindex(位置番号)を取得できます。
bind関数に関しては、【コード付】Tkinterで使われるbindとは?bindの仕組みを交えて解説でまとめていますので、詳しく知りたい方は是非ご確認ください。
まとめ
- Tkinterは、Window, Frame, Widgetで構成される。
- Tkinterで使われるlistboxとは、Widgetの一種で、複数の選択肢の中から、1つ以上を選ぶときに使われる入力フォームを意味します。
- 別名listbox Widgetと呼ばれます。