listboxにスクロールバーを付ける

listboxを使用するのは簡単ですが、選択要素が増えるとスクロールボタンが必要になります。

これが結構面倒くさい。 やっとその方法を見つけました。
結論を言うと、canvasやformを作りその上にwidget(部品)を載せるやり方です。
特に関数(def show_letter())の所を覚えておかないと、次回も手こずります。

 

 # listboxに縦スクロールバーを付ける.py 2/18/2021 OK 
 # ttk使用せず、canvas上にlistboxを表示 2/22/2021 
 # canvasでもframeでもそのまま入れ替えれば動作する 
   
1import tkinter as tk 
2  
3# rootウィンドウの設定 
4root = tk.Tk() 
5root.title("scroll app") 
6root.geometry("200x200") 
7  
8label_1 = tk.Label(root, text="Your selection", bg="yellow") 
9label_1.place(x=60, y=120) 
10  
11# listboxを載せるcanvasの作成と設置 
12#******************* 
13canvas = tk.Canvas(root) 
14canvas.pack(padx=0, pady=30) 
15  
16# Listboxの選択肢 
17letters = ('All', 'a', 'b', 'c', 'd', 'd', 'f') 
18lists = tk.StringVar(value=letters) 
19  
20# 各種ウィジェットの作成 
21listbox = tk.Listbox(canvas, listvariable=lists, width=5, height=4) 
22  
23# スクロールバーの作成 
24scrollbar = tk.Scrollbar(canvas, orient=tk.VERTICAL, command=listbox.yview) 
25  
26# スクロールバーをListboxに反映 
27listbox["yscrollcommand"] = scrollbar.set 
28  
29# 各種ウィジェットの設置 
30listbox.grid(row=0, column=0) 
31scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S)) 
32  
33#************************ 
34  
35#listboxから選んだ文字を表示する 
36#-------------------------- 
37def show_letter(): 
38    for i in listbox.curselection(): 
39        selected_letter = listbox.get(i) 
40    label_1["text"] = selected_letter 
41  
42btn_1 = tk.Button(root, width=12, text="Click here", 
43                  bg="light blue", command=show_letter) 
44btn_1.place(x=50, y=150) 
45#---------------------------- 
46  
47root.mainloop() 

 

左:選択前     右:選択後

 

 

 

シニア別館
csvファイルの呼び込み その二

textファイルでもcsvファイルでも読めるように、読込機能だけのcodeをアップしておきます。# …

Python別館
Python別館 目次

Pythonで作成したアプリ関連の記事は「Python別館」に、widgetやその使用方法・それを使 …

シニア別館
Q&A テンプレート script編

先に見栄えの良いGUIで作る英単語学習アプリを上げましたが、今回はその基になるscriptによるアプ …