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)
これにより、リストボックスに縦方向のスクロールバーが連動し、
リスト内の項目がスクロール可能になります。
リストボックスの枠が項目よりも多くなると、スクロールバーは解除されます。
オプション一覧(色・フォント・大きさ変更・デザインなど)
リストボックスもボタンやラベルのようにさまざまなオプションを設定できます。
# リストボックスのオプション設定
listbox = tk.Listbox(root, width=40, height=10, bg="lightblue", font=("Arial", 12), selectbackground="yellow",selectforeground="red")
listbox.pack()
エントリーの文字列をリストに追加する
エントリーボックスにユーザーが文字を入力し、
ボタン、Enterキーを押すとリストボックスに追加していきます。
また、リストボックスにスクロールバーを追加して、リストをダブルクリックすると、
ラベルにリストの文字を追加します。
ダブルクリックをするには、bindでイベントを追加する必要があります。
ソースコード
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は、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。
- 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonをインストールから環境設定、基本文法が学習
さらに暗号化、インフラ自動化、非同期処理についても学べます。
Pythonを基礎から応用まで学びたい人におすすめ
- みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2024年最新版】
機械学習ライブラリで文字認識や株価分析などを行う。
人口知能やニューラルネットワーク、機械学習を学びたい人におすすめ。
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
統計分析、機械学習の実装、ディープラーニングの実装を学習。
データサイエンティストになりたい人におすすめ。
- 0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜
TkinterのGUIを作成から発展的な操作までアプリ実例を示して学習。
アプリ開発したい人におすすめ。
解説
- フィールド(メンバ変数)
「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アプリを作成できます。