mieki256's diary



2024/05/24(金) [n年前の日記]

#1 [python] tkinterのListboxについて勉強中

Python + tkinter の Listbox について勉強中。各アイテム(項目)の背景色をそれぞれ変更して、クリックすると別ウィジェットの Label の背景色を変更する処理をしたい。

環境は Windows10 x64 22H2 + Python 3.10.10 64bit + tkinter。

以下のような感じになった。

01_listbox_ss01.gif

_01_listbox.py
import tkinter as tk

cols = [
    (0, 0, 0),
    (0, 0, 255),
    (0, 255, 0),
    (0, 255, 255),
    (255, 0, 0),
    (255, 0, 255),
    (255, 255, 0),
    (255, 255, 255),
]


def get_color_text(c):
    return "#%02x%02x%02x" % (c[0], c[1], c[2])


def item_selected(e):
    index = e.widget.curselection()
    color = get_color_text(cols[index[0]])
    lbl.config(bg=color)
    lbox.configure(selectforeground="white", selectbackground=color)


# initialize tkinter
root = tk.Tk()

lbl = tk.Label(root, text="", width=20, height=5, borderwidth=1, relief=tk.SOLID)
lbl.pack(padx=8, pady=8)

lbox = tk.Listbox(
    root,
    selectmode=tk.SINGLE,
    activestyle=tk.NONE,
    font=("Arial", 16),
    width=14,
    bg="#666666",
)
lbox.pack(padx=8, pady=8)

for c in cols:
    lbox.insert(tk.END, "%d, %d, %d" % (c[0], c[1], c[2]))

# set item color
for i, c in enumerate(cols):
    lbox.itemconfig(i, bg=get_color_text(c))

root.bind("<Escape>", lambda e: root.destroy())
root.bind("<q>", lambda e: root.destroy())

lbox.bind("<<ListboxSelect>>", item_selected)

root.mainloop()

以下で実行。
python 01_listbox.py

少しだけ説明。Listbox() に渡すオプションについては以下。
メソッドについては以下。

以上、1 日分です。

過去ログ表示

Prev - 2024/05 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project