Tkinter Listbox

Tkinter Listbox とは?

Listbox はユーザーに複数の選択肢を提示して、選択させるタイプのウィジェットです。

テーマ付きのウィジェットには Listbox は含まれません。つまり ttk.Listbox というのはありません。

Tkinter Listbox のオプション

Tkinter Listbox の height オプション

Tkinter Listbox の height オプションは、リストの高さを指定します。0 の場合はリスト全体が表示される高さになります。

Tkinter Listbox の listvariable オプション

Tkinter Listbox の listvariable オプションは、リストに表示される内容を表示するグローバル変数を指定します。

Tkinter Listbox の selectmode オプション

Tkinter Listbox の selectmode オプションは、リストの操作スタイルを指定します。 有効な値は single, browse, multiple, extended です。デフォルトは browse です。

Tkinter Listbox の state オプション

Tkinter Listbox の state オプションは、リストボックスの状態を指定します。 有効な値は normal と disabled です。

Tkinter Listbox の width オプション

Tkinter Listbox の width オプションは、リストの幅を文字数単位で指定します。

Tkinter Listbox のサンプルコード

ここでは tkinter の Listbox ウィジェットの使用例を示します。

次のように通貨を表すリストボックスが左側にあり、右側にボタンを配置します。

tkinter Listbox

リストボックス内のエントリーを選択、または、ボタンを押したタイミングで、選択されている内容をコンソールに出力します。

from tkinter import *
from tkinter import ttk

def show_selection():
    for i in lb.curselection():
        print(lb.get(i))


if __name__ == '__main__':
    root = Tk()
    root.title('Listbox 1')

    # フレーム
    frame = ttk.Frame(root, padding=10)
    frame.grid()

    # リストボックス
    currencies = ['JPY', 'USD']
    v = StringVar(value=currencies)
    lb = Listbox(
        frame, listvariable=v,
        selectmode='multiple', height=4)
    lb.insert(END, 'EUR')
    lb.bind(
        '<<ListboxSelect>>',
        lambda e: show_selection())
    lb.grid(row=0, column=0)

    # Button
    button1 = ttk.Button(
        frame, text='OK',
        command=lambda: show_selection())
    button1.grid(row=0, column=1)

    root.mainloop()

Listbox は ttk ではない、標準のウィジェットです。同様の内容を ttk で実現するには TreeView が利用できます。

リスト内のオプションの選択時のイベントを処理するには、<<ListboxSelect>> イベントに関数をアタッチします。

上記の例では初期化時に listvariable にリストを渡すことで、リストボックスの内容を作成しています。また、初期化時のあとにさらに insert メソッドでリストボックス内のオプションを追加しています。

オプションを追加するときに END を指定することで、オプションの末尾にオプションが追加されています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門