Как отобразить изображение в первом столбце TreeViewPython

Программы на Python
Anonymous
Как отобразить изображение в первом столбце TreeView

Сообщение Anonymous »

Я работаю над приложением Python с использованием Tkinter, которое включает виджет ttk.Treeview с двумя столбцами: «Имя стримера» и «Статус». Каждая строка в древовидном представлении представляет стример, и я хочу улучшить ее, отобразив изображение в первом столбце рядом с именем каждого стримера.
Вот что у меня есть:

Код: Выделить всё

import os
import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk

# Function to update the table with live status
def update_table():
# Example data (replace with your own logic)
streamers = [
{"name": "Streamer1", "status": "Live"},
{"name": "Streamer2", "status": "Offline"}
]

for streamer in streamers:
streamer_name = streamer["name"]
status = streamer["status"]
logo_path = f"assets/logos/{streamer_name}.jpg"

# Insert item into treeview
item_id = tree.insert("", "end", values=(streamer_name, status))

# Display image if available
if os.path.exists(logo_path):
logo = Image.open(logo_path)
logo = logo.resize((50, 50))
logo = ImageTk.PhotoImage(logo)
tree.image_names[streamer_name] = logo  # Store reference to image
tree.set(item_id, column="#0", value=logo)  # Error occurs here

# Create main application window
root = tk.Tk()
root.geometry("600x400")
root.title("Streamer Status")

# Create frame to hold treeview
frame = tk.Frame(root)
frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

# Create treeview
columns = ("Streamer Name", "Status")
tree = ttk.Treeview(frame, columns=columns, show="headings")
tree.heading("Streamer Name", text="Streamer Name", anchor="w")
tree.heading("Status", text="Status", anchor="w")
tree.column("Streamer Name", anchor="w", width=200)
tree.column("Status", anchor="w", width=100)

# Store references to loaded images
tree.image_names = {}

# Add vertical scrollbar
vsb = ttk.Scrollbar(frame, orient="vertical", command=tree.yview)
tree.configure(yscrollcommand=vsb.set)

# Place treeview and scrollbar
tree.grid(row=0, column=0, sticky="nsew")
vsb.grid(row=0, column=1, sticky="ns")

# Example of adding streamer data
update_table()

# Start the main event loop
root.mainloop()
Проблема, с которой я столкнулся, заключается в попытке установить изображение (логотип) в первом столбце (#0) с помощью Tree.set(item_id, columns="#0", value =logo), я получаю следующую ошибку: _tkinter.TclError: Невозможно установить столбец отображения № 0. Мне нужна помощь в понимании того, как правильно отображать изображения рядом с именем каждого стримера в виджете ttk.Treeview.
Вот как это выглядит сейчас:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/786 ... f-treeview

Вернуться в «Python»