※このページではアフィリエイト広告を利用しています

【Python応用】Tkinterでアプリ作成-Listbox使用例まとめ-

Python

PythonのGUIライブラリであるtkinterには、さまざまなウィジェットが用意されていますが、その中でもListboxはリストやアイテムを表示できるウィジェットになります。

この記事では、Listboxの基本的な使い方を紹介します。

この記事の対象

  • Listboxの基本的な使用方法を知りたい方
  • Listboxでスクロールバーを追加する方法を知りたい方
  • Listboxでイベントハンドラを設定する方法を知りたい方
スポンサーリンク
スポンサーリンク

Listboxとは?

Listboxは要素を羅列したい場合などに使用されるウィジェットになります。

例えば、フォルダ内のファイル一覧などを取得して可視化したい場合に使用できます。

基本的な型

import tkinter as tk


root = tk.Tk()
root.title("Listbox")
lb_out = tk.Listbox(root)
lb_out.insert(1,"Test")
lb_out.pack()

root.mainloop()

基本的にはListboxを配置して、要素をinsertメソッドで追加していきます。

Listboxの使用例

要素を追加

Listboxに要素を追加するには、insertメソッドを使用します。

import tkinter as tk


root = tk.Tk()
root.title("Listbox")
lb_out = tk.Listbox(root)
lb_out.insert(1,"Test")
lb_out.insert(2,"Hoge")
lb_out.pack()

root.mainloop()

結果

選択した要素の取得

選択されたアイテムを取得するには、curselection()メソッドを使用します。

import tkinter as tk

def show_selected_item():
    selected_items = lb_out.curselection()
    if selected_items:
        selected_index = selected_items[0]
        selected_item = lb_out.get(selected_index)
        label.config(text=f"選択したアイテム: {selected_item}")
    else:
        label.config(text="アイテムが選択されていません")

root = tk.Tk()
root.title("Listbox")

# Listboxを作成し、アイテムを追加
lb_out = tk.Listbox(root)
lb_out.insert(1, "Item 1")
lb_out.insert(2, "Item 2")
lb_out.insert(3, "Item 3")
lb_out.grid(row=0, column=0, padx=10, pady=10, columnspan=2, sticky='we')

# ボタンを作成し、クリック時に選択したアイテムを表示
button = tk.Button(root, text="表示", command=show_selected_item)
button.grid(row=1, column=0, padx=10, pady=10)

# 選択したアイテムを表示するラベル
label = tk.Label(root, text="ここに選択したアイテムが表示されます")
label.grid(row=1, column=1, padx=10, pady=10)

root.mainloop()

結果

イベントハンドラの追加

ユーザーの操作に応じて処理を実行するには、Listboxにイベントハンドラを追加します。

import tkinter as tk

def on_listbox_select(event):
    selected_items = lb_out.curselection()
    if selected_items:
        selected_index = selected_items[0]
        selected_item = lb_out.get(selected_index)
        label.config(text=f"選択したアイテム: {selected_item}")
    else:
        label.config(text="アイテムが選択されていません")

root = tk.Tk()
root.title("Listbox")

# Listboxを作成し、アイテムを追加
lb_out = tk.Listbox(root)
lb_out.insert(1, "Item 1")
lb_out.insert(2, "Item 2")
lb_out.insert(3, "Item 3")
lb_out.grid(row=0, column=0, padx=10, pady=10, columnspan=2, sticky='we')

# Listboxの選択イベントに対するハンドラを設定
lb_out.bind("<<ListboxSelect>>", on_listbox_select)

# 選択したアイテムを表示するラベル
label = tk.Label(root, text="ここに選択したアイテムが表示されます")
label.grid(row=1, column=0, padx=10, pady=10, columnspan=2)

root.mainloop()

結果

Listbox内でスクロールする

Listboxに多数のアイテムがある場合、スクロールが必要です。これはScrollbarウィジェットと組み合わせて行います。

import tkinter as tk

def on_listbox_select(event):
    selected_items = lb_out.curselection()
    if selected_items:
        selected_index = selected_items[0]
        selected_item = lb_out.get(selected_index)
        label.config(text=f"選択したアイテム: {selected_item}")
    else:
        label.config(text="アイテムが選択されていません")

root = tk.Tk()
root.title("Listbox with Scrollbar")

# スクロールバーの作成
scrollbar = tk.Scrollbar(root)
scrollbar.grid(row=0, column=1, sticky='ns')

# Listboxを作成し、アイテムを追加
lb_out = tk.Listbox(root, yscrollcommand=scrollbar.set)
for i in range(1, 101):  # 1から100までのアイテムを追加
    lb_out.insert(tk.END, f"Item {i}")
lb_out.grid(row=0, column=0, padx=10, pady=10)

# スクロールバーにListboxを関連付け
scrollbar.config(command=lb_out.yview)

# Listboxの選択イベントに対するハンドラを設定
lb_out.bind("<<ListboxSelect>>", on_listbox_select)

# 選択したアイテムを表示するラベル
label = tk.Label(root, text="ここに選択したアイテムが表示されます")
label.grid(row=1, column=0, padx=10, pady=10, columnspan=2)

root.mainloop()

結果

Listboxから要素を削除

Listboxからアイテムを削除するには、deleteメソッドを使用します。

lb_out.delete(0)  # インデックス0のアイテムを削除

Listboxを無効

Listboxを無効にすると、ユーザーが選択や操作を行えなくなります。無効にするには、configureメソッドを使用します。

lb_out.configure(state=tk.DISABLED)

以下では、これまでのプログラムに上記の機能を追加しています。ボタンを押して、Listboxの有効/無効を切り替えられるようにしています。

import tkinter as tk

def on_listbox_select(event):
    selected_items = lb_out.curselection()
    if selected_items:
        selected_index = selected_items[0]
        selected_item = lb_out.get(selected_index)
        label.config(text=f"選択したアイテム: {selected_item}")
    else:
        label.config(text="アイテムが選択されていません")

def toggle_listbox_state():
    current_state = lb_out.cget("state")
    if current_state == tk.NORMAL:
        lb_out.config(state=tk.DISABLED)
        toggle_button.config(text="Listboxを有効化")
    else:
        lb_out.config(state=tk.NORMAL)
        toggle_button.config(text="Listboxを無効化")

root = tk.Tk()
root.title("Listbox with Scrollbar")

# スクロールバーの作成
scrollbar = tk.Scrollbar(root)
scrollbar.grid(row=0, column=1, sticky='ns')

# Listboxを作成し、アイテムを追加
lb_out = tk.Listbox(root, yscrollcommand=scrollbar.set)
for i in range(1, 101):  # 1から100までのアイテムを追加
    lb_out.insert(tk.END, f"Item {i}")
lb_out.grid(row=0, column=0, padx=10, pady=10)

# スクロールバーにListboxを関連付け
scrollbar.config(command=lb_out.yview)

# Listboxの選択イベントに対するハンドラを設定
lb_out.bind("<<ListboxSelect>>", on_listbox_select)

# 選択したアイテムを表示するラベル
label = tk.Label(root, text="ここに選択したアイテムが表示されます")
label.grid(row=1, column=0, padx=10, pady=10, columnspan=2)

# Listboxの有効/無効を切り替えるボタン
toggle_button = tk.Button(root, text="Listboxを無効化", command=toggle_listbox_state)
toggle_button.grid(row=2, column=0, padx=10, pady=10, columnspan=2)

root.mainloop()

結果

Listboxのスタイルをカスタマイズ

Listboxの見た目をカスタマイズするには、configを用いてフォントや背景色などのスタイルを設定可能です。

以下では、設定ファイル 「Listboxconfig.ini」 から色やフォントの情報を読み取り、それに基づいて Listbox の見た目をカスタマイズしています。configparserについては以下をご参照下さい。

>>>「CSV」ファイルの読み込み・書き込み操作方法とiniファイルの読込み方法

import tkinter as tk
from tkinter import ttk
import configparser

def on_listbox_select(event):
    selected_items = lb_out.curselection()
    if selected_items:
        selected_index = selected_items[0]
        selected_item = lb_out.get(selected_index)
        label.config(text=f"選択したアイテム: {selected_item}")
    else:
        label.config(text="アイテムが選択されていません")

def toggle_listbox_state():
    current_state = lb_out.cget("state")
    if current_state == tk.NORMAL:
        lb_out.config(state=tk.DISABLED)
        toggle_button.config(text="Listboxを有効化")
    else:
        lb_out.config(state=tk.NORMAL)
        toggle_button.config(text="Listboxを無効化")

def load_config():
    config = configparser.ConfigParser()
    config.read('Listboxconfig.ini', encoding='utf-8')
    lb_bg_color = config['ListboxStyle']['BackgroundColor']
    lb_fonts = config['ListboxStyle']['Font']
    lb_out.config(bg=lb_bg_color, font=(lb_fonts,13))

root = tk.Tk()
root.title("Listbox with Scrollbar")


# スクロールバーの作成
scrollbar = tk.Scrollbar(root)
scrollbar.grid(row=0, column=1, sticky='ns')

# Listboxを作成し、アイテムを追加
lb_out = tk.Listbox(root, yscrollcommand=scrollbar.set)
for i in range(1, 101):  # 1から100までのアイテムを追加
    lb_out.insert(tk.END, f"Item {i}")
lb_out.grid(row=0, column=0, padx=10, pady=10)

# スクロールバーにListboxを関連付け
scrollbar.config(command=lb_out.yview)

# Listboxの選択イベントに対するハンドラを設定
lb_out.bind("<<ListboxSelect>>", on_listbox_select)

# 選択したアイテムを表示するラベル
label = tk.Label(root, text="ここに選択したアイテムが表示されます")
label.grid(row=1, column=0, padx=10, pady=10, columnspan=2)

# Listboxの有効/無効を切り替えるボタン
toggle_button = tk.Button(root, text="Listboxを無効化", command=toggle_listbox_state)
toggle_button.grid(row=2, column=0, padx=10, pady=10, columnspan=2)

load_config()  # 設定ファイルから見た目をカスタマイズ

root.mainloop()

結果

【補足】使用したiniファイル

[ListboxStyle]
BackgroundColor = lightgray
Font = Helvetica

まとめ

Python tkinterのListboxは多くのGUIアプリケーションで使用される重要なウィジェットです。これらの基本的な使用方法を理解し、Listboxを効果的に活用してみて下さい。


これからPythonでアプリ開発を行う方には以下の書籍がおすすめです。Tkinterではないですが、分かりやすいです。

タイトルとURLをコピーしました