■はじめに
これまでtkinterでラベル、エントリーボックス、ボタン、ラジオボタンなどの基本機能を紹介してきました。
stjun.hatenablog.com
stjun.hatenablog.com
stjun.hatenablog.com
今回はその中でまだ紹介していない機能の1つ、リストボックスを紹介します。
■コード
忙しい方やpythonのコードを自力で読んで理解できる方向けに、先にコードを載せます。動作環境はAnaconda(python3.7)です。
import tkinter as tk
root=tk.Tk()
root.title("スクロールバーの使い方")
frame=tk.Frame()
frame.grid(row=0,sticky="we")
frame_button=tk.Frame()
frame_button.grid(row=1,sticky="we")
list_value=tk.StringVar()
list_value.set(["Aさん","Bさん","Cさん","Dさん","Eさん","Fさん","Gさん","Hさん","Iさん","Jさん","Kさん","Lさん"])
listbox=tk.Listbox(frame,height=8,listvariable=list_value,selectmode="single")
listbox.pack()
text_str=tk.StringVar()
text_str.set("ボタンを押して下さい")
text=tk.Label(frame_button,textvariable=text_str)
text.grid(row=0,columnspan=3)
def check():
text_check=listbox.curselection()
text_str.set(listbox.get(text_check))
def all_select():
listbox.select_set(0,tk.END)
def all_clear():
listbox.select_clear(0,tk.END)
Button=tk.Button(frame_button,text="判定",command=check)
Button.grid(row=1,column=0)
Button_allselect=tk.Button(frame_button,text="全選択",command=all_select)
Button_allselect.grid(row=1,column=1)
Button_allclear=tk.Button(frame_button,text="全クリア",command= all_clear)
Button_allclear.grid(row=1,column=2)
root.mainloop()
このコードを実行すると以下のような画面が表示されます。
上側のAさん、Bさん...と表示されているのがリストボックスです。
今回Lさんまで入力したので下にスクロールすることもできます。
また例えばCさんをクリックして選び、左下の判定ボタンを押すと選択した人を表示してくれます。
中央下の全選択を押すとリストボックス内の全ての項目をチェックし、右下の全クリアを押すと全ての項目がクリアされます。
■説明
リストボックスの作り方
リストボックスは以下のように書けます。
listbox=tk.Listbox(frame,height=8,listvariable=list_value,selectmode="single")
listbox.pack()
Listboxのカッコの中は左から順に、
- リストボックスを作る場所:今回は上側のframe内に作っています
- リストボックスの高さ=表示する数(今回8に設定したのでA~Hさんまで8人が同時に表示されています。)
- リストに表示する内容:list_valueという変数を作りそこにデータを入れてます。
list_value=tk.StringVar()
list_value.set(["Aさん","Bさん","Cさん","Dさん","Eさん","Fさん","Gさん","Hさん","Iさん","Jさん","Kさん","Lさん"])
- 一度に何個まで選ぶことができるか:今回は1つだけ選べるようにsingleにしています。コメントにも書いてあるようにmultipleにすると次のように複数選べるようになります。
また今回はframe内にリストボックス1つしか作る予定がなかったのでpack()にしましたが、複数の部品を綺麗に配置したい場合は前回記事のようにgrid(row,column)で指定してあげましょう。詳細は以下記事を見てください。
stjun.hatenablog.com
stjun.hatenablog.com
stjun.hatenablog.com
全選択と全クリアの方法
def all_select():
listbox.select_set(0,tk.END)
def all_clear():
listbox.select_clear(0,tk.END)
全選択と全クリアは非常に簡単です。
listbox.select_set()で全選択、listbox.select_clear()で全クリアになります。
またカッコの中の(0,tk.END)が最初(1番目)から最後までという意味になります。
例えば2番目から最後まで選択したい場合は、listbox.select_set(1,tk.END)になります。
またこれらの関数をボタンと結びつける方法は以下の過去記事を参考にしてください。
stjun.hatenablog.com
■最後に
今回はリストボックスを説明しました。個人的にはあまりリストボックスを使う機会はないように感じますが、いざという時はぜひ参考にしてみて下さい。