【Python GUIサンプル】TkinterのListbox(リストボックス)内アイテムを複数選択できるようにする Extended編
使用するオプション
- selectmode
使い方
listbox = Listbox(selectmode= EXTENDED)
selectmodeにEXTENDEDを指定することでCtrlキーやShiftキー押下による身近な複数選択可能な状態になる
サンプル画像
初期表示
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()