tkinter.Listbox【リストボックス ウィジェット】

メモ  (  作成 要素の追加 要素の選択・選択要素の取得 スクロールバー関連付け  )  仮想イベント オプション メソッド

メモ

Listboxのサンプル画像

仮想イベント

仮想イベント説明
<<ListboxSelect>> 項目選択で発生
引数
eventイベントオブジェクト

オプション

メモ

オプション 一覧

個別tkttk説明
activestyleアクティブ要素のスタイル
DOTBOX:点線枠
NONE:特殊スタイルなし
UNDERLINE:下線
exportselectionXセレクション
True・YES 等の定数:有効
False・NO 等の定数:無効
※選択要素を保持:無効
selectmode 選択操作のスタイル
SINGLE【クリック (単一選択)】:1項目・クリックでのみ選択項目を変更
BROWSE【ドラッグ (単一選択)】:1項目・ドラッグで選択項目を変更可
MULTIPLE【複数 (複数選択可)】:項目のクリックで選択状態を切換
EXTENDED【拡張 (複数選択可)】:[Shift]+クリック・[Ctrl]+クリック 等の操作可
setgrid
state状態
NORMAL【通常状態】
DISABLED【無効状態】 (disabledforeground【無効時の前景色】を使用)
xscrollcommand水平方向のスクロール発生時の呼び出し関数
(関連スクロールバーの操作等の処理)
yscrollcommand垂直方向のスクロール発生時の呼び出し関数
(関連スクロールバーの操作等の処理)
リスト項目tkttk説明
fontフォント (tkinter.Font)
listvariableウィジェット変数 (リスト)
サイズ・配置tkttk説明
height行数 (0以下:全体表示)
width幅 (文字単位 / 0以下:全体表示)
justify tk 8.6.5テキストの配置位置
LEFT【左端寄せ】
CENTER【中央寄せ】
RIGHT【右端寄せ】
外観tkttk説明
borderwidth (bd)境界線の幅
relief全体と選択要素の外観
色 関連tkttk説明
background (bg)背景色
foreground (fg)前景色
disabledforeground無効状態の前景色
highlightbackground外枠の (入力フォーカスなし)
highlightcolor外枠の (入力フォーカスあり)
highlightthickness外枠の幅 (入力フォーカス用)
selectbackground選択項目の背景色
selectborderwidth選択項目の枠幅 (ピクセル単位 等)
selectforeground選択項目の前景色
その他tkttk説明
cursorマウスカーソル名
nameインスタンス名 (省略:自動命名)
先頭に半角大文字は不可・ドットは不可 / フルパスで一意
インスタンス識別
takefocus[Tab]キー等でのフォーカス移動の有無〔フォーカス関連メソッド
' ' (空文字列):自動設定
False:なし (スキップ)
True:あり (タブストップ)
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存

色の詳細

説明
'色名'色名:'red'・'green'・'blue'・'gray0'~'gray100'・'system~' 等
下記参照
Tcl8.6/Tk8.6 - Tk Commands - colors
(同名色でも HTML5:カラー定義 と定義に差異あり)
'#RGB'16進 4ビット
'#RRGGBB'16進 8ビット
'#RRRGGGBBB'16進 12ビット
'#RRRRGGGGBBBB'16進 16ビット

マウスカーソル名の詳細 ( cursor )

マウスカーソル名説明
'マウスカーソル名'下記参照 ('arrow'・'wait' 等)
Tcl8.6/Tk8.6 - Tk Commands - cursors (英語)
Tkinter 8.5 reference: a GUI for Python - Cursors (英語)

外観の詳細 ( relief )

外観説明
FLATフラット
GROOVE凹み枠
RAISED隆起 (凸)
RIDGE隆起枠 (凸枠)
SOLID実線
SUNKEN凹み

メソッド

コンストラクタ備考
Listbox(master=None, cnf={ }, **kw) コンストラクタ
master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット)
cnf (辞書型引数)辞書型のオプション
kw (キーワード引数)オプション (複数可)
固有メソッド備考
共通 要素下記で要素指定
・数値インデックス (0~)
ACTIVE:アクティブ要素
ANCHOR:アンカー要素〔select_anchor【アンカー要素 設定】
END:最終要素
 (index( )【要素インデックス・要素数の取得】insert( )【要素挿入】:最終要素の次)
・'@x,y':ピクセル座標の要素
activate(index) アクティブ要素の設定
index要素
bbox(index) 指定要素の座標
戻り値座標のタプル (xオフセット, yオフセット, 幅, 高さ)
index要素
curselection( ) 選択要素の取得
戻り値選択要素番号 (0~) のタプル
delete(first, last=None) 要素の削除
first最初の要素
last最後の要素 (省略:1要素のみ)
get(first, last=None) 要素内容の取得
戻り値要素内容のタプル (該当要素なし:空文字列)
first最初の要素
last最後の要素 (省略:1要素のみ)
index(index) 要素インデックス・要素数の取得
戻り値要素番号 (0~)・要素数
index要素 (END:要素数)
insert(index, *elements) 要素を直前に挿入
index要素 (END:最後)
elements要素内容 (複数指定可)
itemcget(index, option) 要素オプション値の取得
index要素
optionオプション
( itemconfig( )【要素オプションの取得・設定】のオプション参照 )
itemconfig(index, cnf=None, **kw)
itemconfigure(index, cnf=None, **kw)
要素オプションの取得・設定
戻り値 (取得:オプション省略)辞書型のオプション
戻り値 (設定:オプション指定)無効
index要素
cnf下記オプション
kw下記オプション
オプション説明
background・bg背景色
foreground・fg前景色
selectbackground選択時の背景色
selectforeground選択時の前景色
nearest(y) 指定座標に近い要素インデックス取得
戻り値要素インデックス (0~)
yy座標
scan_dragto(x, y) 座標差分 10倍調整 (高速スクロール用)
xx座標
yy座標
( 通常 <Motion> イベントに関連付け )
scan_mark(x, y) 座標記録 (高速スクロール用)
xx座標
yy座標
( 通常マウスボタン押下に関連付け )
see(index) 指定要素が表示されるようにスクロール
index要素
select_anchor(index)
selection_anchor(index)
アンカー要素の設定 (以後 ANCHOR で参照可能)
index要素
select_clear(first, last=None)
selection_clear(first, last=None)
指定範囲の要素を選択解除
first最初の要素
last最後の要素 (省略:1要素のみ)
select_includes(index)
selection_includes(index)
要素の選択有無取得
戻り値選択状態 (1:選択 / 0:未選択)
index要素
select_set(first, last=None)
selection_set(first, last=None)
指定範囲の要素を選択
first最初の要素
last最後の要素 (省略:1要素のみ)
size( ) 要素数の取得
戻り値要素数
xview(*args) 水平方向スクロールコマンド処理
戻り値 (引数なし) 表示されている要素のスクロール位置 (0~1) のタプル (先頭要素, 最終要素)
戻り値 (引数あり)無効
argsコマンド と 引数
コマンドにより下記を呼び出し
xview_moveto【水平方向のスクロール (位置指定)】
xview_scroll【水平方向のスクロール (単位指定)】
※:Scrollbar【スクロールバー】等の関連ウィジェットの command【呼び出し関数】オプションに設定で、 関連ウィジェットの操作が反映
xview_moveto(fraction) 水平方向のスクロール (位置指定)
fraction位置 (0 ~ 1)
xview_scroll(number, what) 水平方向のスクロール (単位指定)
number方向の整数値 (負数:左方向 / 正数:右方向)
whatコマンド文字列 (UNITS:文字単位 / PAGES:ページ単位 / その他:左記の省略形)
yview(*args) 垂直方向スクロールコマンド処理
戻り値 (引数なし) 表示されている要素のスクロール位置 (0~1) のタプル (先頭要素, 最終要素)
戻り値 (引数あり)無効
argsコマンド と 引数
コマンドにより下記を呼び出し
yview_moveto【垂直方向のスクロール (位置指定)】
yview_scroll【垂直方向のスクロール (単位指定)】
※:Scrollbar【スクロールバー】等の関連ウィジェットの command【呼び出し関数】オプションに設定で、 関連ウィジェットの操作が反映
yview_moveto(fraction) 垂直方向のスクロール (位置指定)
fraction位置 (0 ~ 1)
yview_scroll(number, what) 垂直方向のスクロール (単位指定)
number方向の整数値 (負数:上方向 / 正数:下方向)
whatコマンド文字列 (UNITS:要素行単位 / PAGES:ページ単位 / その他:左記の省略形)
共通メソッド (抜粋) 〔詳細はリンク先〕備考
cget( 'option' )
widget['option']
オプション値 取得
下の構文はオプション値の設定も可
config( ~ )
configure( ~ )
オプション 設定・取得
pack( ~ )配置 (パック形式)
grid( ~ )配置 (グリッド形式)
place( ~ )配置 (座標形式)

作成
要素の追加

import tkinter as tk

# トップレベルウィンドウ作成
root = tk.Tk()

# Listbox
lst = ['item A', 'item B', 'item C']
var_list = tk.StringVar(value=lst)

listbox = tk.Listbox(
    root,
    listvariable=var_list,
    height=0,
)
listbox.insert(tk.END, "Item 1")
listbox.insert(tk.END, "Item 2")
listbox.insert(tk.END, "Item 3")
listbox.pack(padx=10, pady=10)

# メインループ
root.mainloop()

Listboxのサンプル画像


要素の選択・選択要素の取得

import tkinter as tk

def func_copy():
    select = listbox_from.curselection()
    listbox_to.select_clear(0, tk.END)
    for i in select:
        listbox_to.select_set(i)


# トップレベルウィンドウ作成
root = tk.Tk()

# Listbox (from)
listbox_from = tk.Listbox(
    root,
    exportselection=False,
    selectmode=tk.EXTENDED,
)
for i in range(10):
    listbox_from.insert(tk.END, "Item_" + str(i))
listbox_from.select_set(2)
listbox_from.select_set(5)
listbox_from.select_set(8)
listbox_from.pack(side=tk.LEFT, padx=10, pady=10)

# Button
button = tk.Button(
    root,
    text="コピー\n\n選択要素の取得\n&\n要素選択",
    command=func_copy,
)
button.pack(side=tk.LEFT, padx=10, pady=10)

# Listbox (to)
listbox_to = tk.Listbox(
    root,
    exportselection=False,
    selectmode=tk.EXTENDED,
)
for i in range(10):
    listbox_to.insert(tk.END, "Item_" + str(i))
listbox_to.pack(side=tk.LEFT, padx=10, pady=10)

# メインループ
func_copy()
root.mainloop()

Listboxのサンプル画像


スクロールバー関連付け

# scrolledlistbox.py
from tkinter import Frame, Listbox, Scrollbar, Pack, Grid, Place
from tkinter.constants import HORIZONTAL, NSEW


class ScrolledListbox(Listbox):
    def __init__(self, master=None, **kw):
        name = kw.get("name")
        if name == None:
            name = ""
        self.frame = Frame(master, name=name)
        self.frame.rowconfigure(0, weight=1)
        self.frame.columnconfigure(0, weight=1)
        self.vbar = Scrollbar(self.frame)
        self.vbar.grid(row=0, column=1, sticky="NWS")
        self.hbar = Scrollbar(self.frame, orient=HORIZONTAL)
        self.hbar.grid(row=1, column=0, sticky="SWE")

        kw.update({'yscrollcommand': self.vbar.set})
        kw.update({'xscrollcommand': self.hbar.set})
        Listbox.__init__(self, self.frame, **kw)
        self.grid(row=0, column=0, sticky=NSEW)
        self.vbar['command'] = self.yview
        self.hbar['command'] = self.xview

        text_meths = vars(Listbox).keys()
        methods = vars(Pack).keys() | vars(Grid).keys() | vars(Place).keys()
        methods = methods.difference(text_meths)
        for m in methods:
            if m[0] != '_' and m != 'config' and m != 'configure':
                setattr(self, m, getattr(self.frame, m))
    
    def forget_hbar(self):
        self.hbar.grid_forget()

    def __str__(self):
        return str(self.frame)
import tkinter as tk
from scrolledlistbox import ScrolledListbox

# トップレベルウィンドウ作成
root = tk.Tk()

# ScrolledListbox (1)
listbox_1 = ScrolledListbox(
    root,
    exportselection=False,
)
for i in range(5):
    listbox_1.insert(tk.END, str(i) + " Item")
listbox_1.select_set(1)
listbox_1.pack(side=tk.LEFT, padx=10, pady=10)

# ScrolledListbox (2)
listbox_2 = ScrolledListbox(
    root,
    exportselection=False,
)
for i in range(20):
    listbox_2.insert(tk.END, str(i) + " Item")
listbox_2.select_set(1)
listbox_2.pack(side=tk.LEFT, padx=10, pady=10)

# ScrolledListbox (3)
listbox_3 = ScrolledListbox(
    root,
    exportselection=False,
)
for i in range(20):
    listbox_3.insert(tk.END, str(i) + " Iteeeeeeeeeeeeeeeeeeeeem")
listbox_3.select_set(1)
listbox_3.pack(side=tk.LEFT, padx=10, pady=10)

# ScrolledListbox (4)
listbox_4 = ScrolledListbox(
    root,
    exportselection=False,
)
listbox_4.forget_hbar()
listbox_4.insert(tk.END, "forget_hbar( )")
for i in range(20):
    listbox_4.insert(tk.END, str(i) + " Item")
listbox_4.select_set(0)
listbox_4.pack(side=tk.LEFT, padx=10, pady=10)

# メインループ
root.mainloop()

Listboxのサンプル画像


仮想イベント

import tkinter as tk


# イベント処理
def select_event(event):
    var_label.set(str(event))


# トップレベルウィンドウ作成
root = tk.Tk()

# Label
var_label = tk.StringVar(value="var_label")
label = tk.Label(
    root,
    textvariable=var_label,
    relief=tk.SUNKEN,
)
label.pack(side=tk.BOTTOM, fill=tk.X)

# Listbox
listbox = tk.Listbox(
    root,
)
listbox.bind("<<ListboxSelect>>", select_event)
for i in range(10):
    listbox.insert(tk.END, "Item_" + str(i))
listbox.pack(padx=10, pady=10)

# メインループ
root.mainloop()

Listboxのサンプル画像