【Python】Tkinterリストボックスの使い方、

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリで、
リストボックス(List box)は複数のデータをユーザーに表示し、選択させるための便利なウィジェットです。

本記事では、リストボックスの基本的な使い方から値の取得、削除、選択、スクロールバーの追加など応用までを詳しく解説していきます。

本記事は次の人におすすめ
  • Pythonで簡単なGUIアプリケーションを作りたい方
  • Tkinterのリストボックスを使ってデータを表示・操作したい方
  • ユーザー入力に応じて、表示項目を動的に変更したい方
  • スクロール可能なリストボックスを実装したい方
  • Tkinterウィジェットのデザインやオプションについて理解を深めたい方
スポンサーリンク

画面(ウィンドウ)の作成

リストボックスを表示するために画面(ウィンドウ)を作成します。

Tkinterでは、Tk()クラスを用いてメインウィンドウを作成し、
そのウィンドウの中にウィジェットを配置していきます。

import tkinter as tk

root = tk.Tk() 
root.title("リストボックス")  
root.geometry("200x150")  
root.mainloop()

リストボックスの作成

リストボックスは、Listboxクラスを使って作成します。

ユーザーが複数の項目から選択できるウィジェットで、
ファイル選択やオプションの選択画面などに幅広く使われます。

listbox = tk.Listbox(root, width=40, height=10)
listbox.pack()

リストボックスを作成し、ウィンドウに配置するためにpack()メソッドを呼び出しています。
その他にも、grid()メソッドやplace()メソッドなどがあります。

リストボックスは、次のような用途に適しています。

リストボックスの用途
  • 複数項目の選択肢を表示し、ユーザーに選択させる
  • ファイルやフォルダのリスト表示
  • 選択項目に応じた動的な操作の実行
  • データの整理やフィルタリング操作

値を取得、選択、削除

リストボックスから値を取得したり、項目を削除・選択することもできます。

#値の取得
selected_item = listbox.get(listbox.curselection())

#選択操作
listbox.select_set(0)  # 最初の項目を選択

#項目の削除
listbox.delete(0, tk.END)

リスト項目を用意して、これらをリストボックスに入れれば、追加できます。
また、項目を初期で選択しています。

import tkinter as tk

root = tk.Tk() 
root.title("リストボックス")  
root.geometry("200x150")  

listbox = tk.Listbox(root, width=40, height=10)
listbox.pack()

# リストボックスに項目を追加
items = ["Apple", "バナナ", "葡萄", "いちご"]
for item in items:
    listbox.insert(tk.END, item)

# 項目を選択
listbox.select_set(0)

root.mainloop()

スクロールバーの追加

リストボックスの項目が多い場合、
スクロールバーを追加することでユーザーが快適に操作できるようになります。

# リストボックスとスクロールバーの作成
listbox = tk.Listbox(root, width=40, height=10)
listbox.pack(side=tk.LEFT, fill=tk.BOTH)

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# スクロールバーとリストボックスを連携
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)

これにより、リストボックスに縦方向のスクロールバーが連動し、
リスト内の項目がスクロール可能になります。
リストボックスの枠が項目よりも多くなると、スクロールバーは解除されます。

オプション一覧(色・フォント・大きさ変更・デザインなど)

リストボックスもボタンやラベルのようにさまざまなオプションを設定できます。

例にしているオプション一覧
  • 背景色:bg=”lightblue”のように指定して、リストボックスの背景色を変更できます。
  • フォント:font=(“Arial”, 12)でフォントスタイルとサイズを指定可能です。
  • サイズ変更:widthやheightオプションを使ってリストボックスの大きさを自由に変更できます。
  • 選択項目の色:selectbackground、selectforegroundで、選択された項目の背景色を変更できます。
# リストボックスのオプション設定
listbox = tk.Listbox(root, width=40, height=10, bg="lightblue", font=("Arial", 12), selectbackground="yellow",selectforeground="red")
listbox.pack()

エントリーの文字列をリストに追加する

エントリーボックスにユーザーが文字を入力し、
ボタン、Enterキーを押すとリストボックスに追加していきます。

Tkinterのエントリーボックスの使い方を紹介します。
Tkinterのボタンの使い方を紹介します。

また、リストボックスにスクロールバーを追加して、リストをダブルクリックすると、
ラベルにリストの文字を追加します。

Tkinterのスライダーバーの使い方を紹介しています。
Tkinterのラベルの使い方を紹介しています。

ダブルクリックをするには、bindでイベントを追加する必要があります。

Tkinterでクリックイベントを付ける方法を紹介しています。

ソースコード

import tkinter as tk

# メインウィンドウの作成
root = tk.Tk()
root.title("リストボックス")

# エントリー(テキスト入力)の作成
entry = tk.Entry(root, width=40)
entry.pack(padx=10,pady=10)

# フレームを作成してリストボックスとスクロールバーをまとめる
frame = tk.Frame(root)
frame.pack(padx=10,pady=10)

# リストボックスの作成
listbox = tk.Listbox(frame, width=40, height=10)
listbox.pack(side=tk.LEFT)

# スクロールバーの作成
scrollbar = tk.Scrollbar(frame)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# リストボックスとスクロールバーを連動させる
listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)

# エントリーの内容をリストボックスに追加する関数
def add_listbox(event = None): 
    item = entry.get()  
    if item: 
        listbox.insert(tk.END, item) 
        entry.delete(0, tk.END)
        
# リストボックスの項目を全て削除する関数
def reset_listbox():
    listbox.delete(0, tk.END)  # リストボックスの全項目を削除

# ボタン用のフレームを作成
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

# 追加ボタンの作成
add_button = tk.Button(button_frame, text="追加", command=add_listbox)
add_button.grid(row=0, column=0, padx=5)

# リセットボタンの作成
reset_button = tk.Button(button_frame, text="リセット", command=reset_listbox)
reset_button.grid(row=0, column=1, padx=5)
# 項目を表示するラベルの作成
label = tk.Label(root, text="input text")
label.pack(padx=10,pady=10)

# リストボックスでダブルクリックした項目をラベルに表示する関数
def item(event):
    # ダブルクリックされた項目のインデックスを取得
    selected_index = listbox.curselection()
    if selected_index:
        # 選択された項目のテキストを取得してラベルに表示
        selected_item = listbox.get(selected_index)
        label.config(text=selected_item)

# リストボックスの項目をダブルクリックした際のイベントバインド
listbox.bind("<Double-Button-1>", item)

# エントリーでEnterキーが押された時に追加するようにバインド
entry.bind("<Return>", add_listbox)

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

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。




解説

  • フィールド(メンバ変数)

「root」:メインウィンドウを保持する変数。アプリケーションのウィンドウそのものを表しています。
「entry」:ユーザーが入力するテキストフィールドの変数。ユーザーが文字列を入力できる領域を提供します。
「frame」:リストボックスとスクロールバーをまとめて配置するためのフレーム。UI要素をグループ化するためのものです。
「listbox」:複数の項目を表示するリストボックス。ユーザーが複数の項目から選択することができる要素です。
「scrollbar」:リストボックスのスクロールを制御するためのスクロールバー。
「button_frame」:追加ボタンとリセットボタンをまとめて配置するフレーム。
「add_button」:エントリーに入力されたテキストをリストボックスに追加するボタン。
「reset_button」:リストボックスの全項目を削除するボタン。
「label」:リストボックスの項目を選択した時に、そのテキストを表示するためのラベル。

  • 関数・メソッド

add_listbox関数
この関数は、エントリーに入力された文字列を取得し、リストボックスに追加します。
入力が空白でない場合のみ、エントリーから文字列を取得し、
それをリストボックスの最後に追加します。

追加後、エントリーの内容をクリアします(空にします)。
イベント引数(event)は、Enterキーが押された際にも
この関数が呼び出されるように設定されています。

reset_listbox関数
この関数は、リストボックス内の全ての項目を削除します。
delete(0, tk.END)で、リストボックスの最初の項目から最後の項目まで全てを消去しています。

item関数
この関数は、リストボックス内でダブルクリックされた項目のテキストを取得、ラベルに表示します。

リストボックスの選択された項目のインデックスを取得し、
対応するテキストを取得してラベルの内容を変更します。

実演

Entryウィジェットを使用して、ユーザーがリストに追加する文字列を入力できるテキスト入力フィールドを設置します。

その後、ListboxとScrollbarを作成し、リストボックス内の項目が多くなった際にスクロールして項目を確認できるように設定します。

追加ボタンをクリックすると、入力されたテキストがリストボックスに追加され、リセットボタンを押すとリスト内の全項目が削除されます。

リストボックス内の項目をダブルクリックすると、その項目のテキストがラベルに表示される仕組みです。

まとめ

Tkinterのリストボックスを使うことで、
複数の項目を表示・選択するインターフェースを簡単に作成できます。

スクロールバーやボタンを使った追加・削除機能も加えることで、
ユーザーにとって使いやすいアプリケーションを開発可能です。

オプションを活用して、デザインや操作性を調整し、より高品質なGUIアプリを作成できます。

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