def load_products_cards(self):
# 1. Очищаем старое содержимое перед загрузкой
for widget in self.scrollable_frame.winfo_children():
widget.destroy()
# 2. Получаем список товаров из БД
products = self.db.get_all_products()
import os # Убедись, что импорт есть в начале файла
for p in products:
# Обработка данных для отображения
try: discount = float(str(p.discount).replace('%', '').strip())
except: discount = 0.0
try: qty = float(str(p.quantity).strip())
except: qty = 0.0
# Цветовое оформление (Практика 5)
if qty == 0:
bg_color = "#ADD8E6"
fg_color = "black"
elif discount > 10:
bg_color = "#2E8B57"
fg_color = "white"
else:
bg_color = "#FFFFFF"
fg_color = "black"
# Создаем карточку
card_frame = tk.Frame(self.scrollable_frame, bg=bg_color, 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)
# Логика поиска картинки
image_name = p.photo if (p.photo and p.photo.strip() != "") else "picture.png"
img_path = os.path.join("images", image_name)
if not os.path.exists(img_path):
img_path = os.path.join("images", "picture.png")
try:
img = tk.PhotoImage(file=img_path).subsample(2, 2)
img_lbl = tk.Label(img_container, image=img, bg="#FFFFFF")
img_lbl.image = img # Сохраняем ссылку на объект изображения
img_lbl.pack(fill=tk.BOTH, expand=True)
except:
tk.Label(img_container, text="Нет фото", font=("Arial", 8), bg="#FFFFFF").pack(fill=tk.BOTH, expand=True)
# --- Центральная часть (Данные) ---
info_frame = tk.Frame(card_frame, bg=bg_color)
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=bg_color, fg=fg_color).pack(anchor=tk.W)
tk.Label(info_frame, text=f"Описание: {p.description}", font=("Arial", 9), bg=bg_color, fg=fg_color, wraplength=400, justify=tk.LEFT).pack(anchor=tk.W)
tk.Label(info_frame, text=f"Производитель: {p.manufacturer}", font=("Arial", 9), bg=bg_color, fg=fg_color).pack(anchor=tk.W)
tk.Label(info_frame, text=f"Поставщик: {p.supplier}", font=("Arial", 9), bg=bg_color, fg=fg_color).pack(anchor=tk.W)
tk.Label(info_frame, text=f"Цена: {p.price} руб.", font=("Arial", 10, "bold"), bg=bg_color, fg=fg_color).pack(anchor=tk.W)
tk.Label(info_frame, text=f"Количество: {p.quantity}", font=("Arial", 9), bg=bg_color, fg=fg_color).pack(anchor=tk.W)
# --- Правая часть (Скидка) ---
discount_frame = tk.Frame(card_frame, bg=bg_color)
discount_frame.pack(side=tk.RIGHT, padx=25, pady=10)
tk.Label(discount_frame, text="Скидка", font=("Arial", 9), bg=bg_color, fg=fg_color).pack()
tk.Label(discount_frame, text=f"{p.discount}%", font=("Arial", 14, "bold"), fg="red", bg=bg_color).pack()