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(“200×200”) | |
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() |
左:選択前 右:選択後