機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【Python+Tkinter】【初心者】リストボックスを作ってみよう

pythonTkinterでリストボックスを使う方法

■はじめに

これまでtkinterでラベル、エントリーボックス、ボタン、ラジオボタンなどの基本機能を紹介してきました。
stjun.hatenablog.com

stjun.hatenablog.com

stjun.hatenablog.com

 

今回はその中でまだ紹介していない機能の1つ、リストボックスを紹介します。

 

■コード

忙しい方やpythonのコードを自力で読んで理解できる方向けに、先にコードを載せます。動作環境はAnaconda(python3.7)です。

#スクロールバーの使い方
import tkinter as tk

#ウインド画面の作成
root=tk.Tk()
root.title("スクロールバーの使い方")

#フレームの作成
#フレーム1(上側:リストボックスを格納する)
frame=tk.Frame()
frame.grid(row=0,sticky="we")
#フレーム2(下側:ボタンを格納する)
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さん"])

#リストボックスの作成
#selectmodeの種類(single:1つだけ選択できる、multiple:複数選択できる、extended:複数選択可能+ドラッグでも選択可能)
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さんまで入力したので下にスクロールすることもできます。

f:id:stjun:20190714213352p:plain   f:id:stjun:20190714213415p:plain

また例えばCさんをクリックして選び、左下の判定ボタンを押すと選択した人を表示してくれます。

f:id:stjun:20190714213740p:plain

中央下の全選択を押すとリストボックス内の全ての項目をチェックし、右下の全クリアを押すと全ての項目がクリアされます。

f:id:stjun:20190714213850p:plain f:id:stjun:20190714213922p:plain

■説明

リストボックスの作り方

リストボックスは以下のように書けます。

#リストボックスの作成 #selectmodeの種類(single:1つだけ選択できる、multiple:複数選択できる、extended:複数選択可能+ドラッグでも選択可能) 
listbox=tk.Listbox(frame,height=8,listvariable=list_value,selectmode="single")
listbox.pack()

Listboxのカッコの中は左から順に、

  1. リストボックスを作る場所:今回は上側のframe内に作っています
  2. リストボックスの高さ=表示する数(今回8に設定したのでA~Hさんまで8人が同時に表示されています。)
  3. リストに表示する内容:list_valueという変数を作りそこにデータを入れてます。
    #データ(リストボックスに表示させる) 
    list_value=tk.StringVar()
    list_value.set(["Aさん","Bさん","Cさん","Dさん","Eさん","Fさん","Gさん","Hさん","Iさん","Jさん","Kさん","Lさん"]) 
  4. 一度に何個まで選ぶことができるか:今回は1つだけ選べるようにsingleにしています。コメントにも書いてあるようにmultipleにすると次のように複数選べるようになります。

    f:id:stjun:20190714214755p:plain

また今回は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

 

■最後に

今回はリストボックスを説明しました。個人的にはあまりリストボックスを使う機会はないように感じますが、いざという時はぜひ参考にしてみて下さい。