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

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

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

 

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

 

左:選択前     右:選択後

 

 

 

Python小学館
クラスへの移行練習-① ②

先人のプログラムを利用させて頂くには、やはりクラス(特に継承機能)を理解する必要が有ります。 そこで …

Python別館
Python別館 目次

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

Python小学館
csvファイルの呼び込み その二

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