【Python GUIサンプル】TkinterでListbox(リストボックス)を使ってみる
目次
リストボックス
リストボックスは、与えられたアイテムリストの中から1つ以上を選択するWidgetです。

使用するモジュール
tkinter.ListBox
リストボックスの使い方
Listbox(app, listvariable=StringVar(), height=5)
heightオプションを指定して一度に表示する数を制御
・height=5のように指定
Listの中身をWidget変数から指定
・listvariable=StringVar型を指定
・StringVarのvalueにtuple型の配列を指定することで複数要素を入れることができる
選択されているアイテムの取得
下記を実行することにより選択されている要素のindexリストが手に入る。
listbox.curselection()
リストに要素を追加する
listbox.insert(index,element)
indexに”end”を指定することで末尾に追加する
サンプル
選択を押すことで、元のリストボックスから選択された要素を別のリストボックスに値をコピーするサンプル

下記がサンプルコード
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)
snames = StringVar()
self.listbox = Listbox(app, listvariable=cnames, height=5)
self.listbox.pack()
button = ttk.Button(app,text = "選択↓" ,command=self.selectItem)
button.pack()
self.selectbox = Listbox(app, listvariable=snames, height=5)
self.selectbox.pack()
def selectItem(self):
# 選択されている数値インデックスを含むリストを取得
itemIdxList = self.listbox.curselection()
if len(itemIdxList) == 1:
country = self.countrynames[itemIdxList[0]]
# 末尾に選択された要素を追加する
self.selectbox.insert("end",country)
if __name__ == '__main__':
#Tkインスタンスを作成し、app変数に格納する
app = Tk()
#縦幅400横幅300に画面サイズを変更します。
app.geometry("600x300")
#タイトルを指定
app.title("Listbox Sample Program")
# #フレームを作成する
frame = ListboxSampleApp(app)
# 格納したTkインスタンスのmainloopで画面を起こす
app.mainloop()