def load_products_cards(self):
import os
from PIL import Image, ImageTk
# 1. Очищаем старое содержимое
for widget in self.scrollable_frame.winfo_children():
widget.destroy()
# 2. Получаем товары из БД
products = self.db.get_all_products()
images_dir = "images"
for p in products:
# Получаем чистое имя файла из БД (например, "1.jpg")
photo_name = str(p.photo).strip() if p.photo else ""
img_path = os.path.join(images_dir, photo_name)
# Если в базе пусто или файл не найден в папке -> берем заглушку
if not photo_name or not os.path.exists(img_path):
img_path = os.path.join(images_dir, "picture.png")
# Создаем карточку
card_frame = tk.Frame(self.scrollable_frame, bg="#FFFFFF", bd=2, relief=tk.SOLID)
card_frame.pack(fill=tk.X, padx=10, pady=5, ipady=5)
# --- ЛЕВАЯ ЧАСТЬ: ФОТО ---
img_container = tk.Frame(card_frame, width=120, height=120, bg="#FFFFFF", bd=1, relief=tk.SOLID)
img_container.pack(side=tk.LEFT, padx=15, pady=10)
img_container.pack_propagate(False)
try:
# Открываем изображение
pil_image = Image.open(img_path)
# Подгоняем размер под контейнер (110x110)
pil_image = pil_image.resize((110, 110), Image.Resampling.LANCZOS)
img = ImageTk.PhotoImage(pil_image)
img_lbl = tk.Label(img_container, image=img, bg="#FFFFFF")
img_lbl.image = img # Ссылка обязательно нужна, чтобы фото не удалилось
img_lbl.pack(fill=tk.BOTH, expand=True)
except Exception as e:
# Если файл поврежден или это не картинка
tk.Label(img_container, text="Нет фото", bg="#FFFFFF").pack(fill=tk.BOTH, expand=True)
# --- ЦЕНТРАЛЬНАЯ ЧАСТЬ: ТЕКСТ ---
info_frame = tk.Frame(card_frame, bg="#FFFFFF")
info_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=15, pady=10)
tk.Label(info_frame, text=f"{p.category} | {p.name}", font=("Arial", 12, "bold"), bg="#FFFFFF").pack(anchor=tk.W)
tk.Label(info_frame, text=f"Описание: {p.description}", font=("Arial", 9), bg="#FFFFFF", wraplength=300, justify=tk.LEFT).pack(anchor=tk.W)
tk.Label(info_frame, text=f"Цена: {p.price} руб.", font=("Arial", 10, "bold"), bg="#FFFFFF").pack(anchor=tk.W)
tk.Label(info_frame, text=f"Наличие: {p.quantity} {p.unit}", font=("Arial", 9), bg="#FFFFFF").pack(anchor=tk.W)