【Python GUIサンプル】TkinterのListbox(リストボックス)内アイテムを複数選択できるようにする Extended編

<tkinterトップページに戻る>

使用するオプション

  • selectmode

使い方

listbox  =  Listbox(selectmode= EXTENDED)

selectmodeにEXTENDEDを指定することでCtrlキーやShiftキー押下による身近な複数選択可能な状態になる

複数選択可能なMultiple編はこちら

サンプル画像

初期表示

Ctrl+クリックで複数選択

print押下で表示

サンプルコード

from tkinter import *
import tkinter.ttk as ttk

class ListboxSampleApp(ttk.Frame):


    def __init__(self, app):
        super().__init__(app)
        self.pack()
        self.countrynames = ('Argentina', 'Australia', 'Belgium', 'Brazil', 'Canada', 'China', 'Denmark', \
                                'Finland', 'France', 'Greece', 'India', 'Italy', 'Japan', 'Mexico', 'Netherlands', 'Norway', 'Spain', \
                                'Sweden', 'Switzerland')
        cnames = StringVar(value=self.countrynames)

        self.listbox  =  Listbox(app, listvariable=cnames, height=5,selectmode= EXTENDED)
        self.listbox.pack()

        button = ttk.Button(app,text = "print" ,command=self.selectItem)
        button.pack()

        self.entryvalue = StringVar()
        self.printEntry = ttk.Entry(app,textvariable = self.entryvalue)
        self.printEntry.pack()

    def selectItem(self):
        # 選択されている数値インデックスを含むリストを取得
        itemIdxList =  self.listbox.curselection()
        itemName = ""
        for idx in itemIdxList:
            country = self.countrynames[idx]
            # 末尾に選択された要素を追加する
            if itemName != "":
                itemName = itemName + "," + country
            else:
                itemName = country
        self.entryvalue.set(itemName)



if __name__ == '__main__':
    #Tkインスタンスを作成し、app変数に格納する
    app  = Tk()
    #縦幅400横幅200に画面サイズを変更します。
    app.geometry("400x200")
    #タイトルを指定
    app.title("Listbox SelectMode Extended Sample Program")
    # #フレームを作成する
    frame = ListboxSampleApp(app)
    # 格納したTkインスタンスのmainloopで画面を起こす
    app.mainloop()

あわせて読みたい