Загрузка данных


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

# --- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (текущее состояние) ---
current_device = "Arduino"
current_category = "Рисунок"

# --- ФУНКЦИЯ ОБНОВЛЕНИЯ КАРТИНКИ ---
def update_image():
    global current_device, current_category
    
    # Формируем имя файла, например: "Arduino_Схема.png"
    filename = f"{current_device}_{current_category}.png"
    filepath = os.path.join("images", filename)

    try:
        # Открываем и масштабируем картинку
        img = Image.open(filepath)
        img.thumbnail((500, 450), Image.Resampling.LANCZOS)
        
        # Конвертируем для Tkinter
        photo = ImageTk.PhotoImage(img)
        
        # Обновляем метку
        image_label.config(image=photo, text="")
        image_label.image = photo  # Важно: сохраняем ссылку, чтобы картинка не исчезла!
        
        # Обновляем заголовок окна
        root.title(f"giga ude - {current_device} | {current_category}")

    except FileNotFoundError:
        image_label.config(image="", text=f"Файл не найден:\n{filepath}")
        image_label.image = None
    except Exception as e:
        image_label.config(image="", text=f"Ошибка загрузки:\n{e}")
        image_label.image = None

# --- ФУНКЦИИ НАЖАТИЯ КНОПОК ---
def select_device(device_name):
    global current_device, current_category
    current_device = device_name
    current_category = "Рисунок" # При смене устройства сбрасываем на рисунок
    update_image()

def select_category(category_name):
    global current_category
    current_category = category_name
    update_image()

# --- ГЛАВНОЕ ОКНО (Используем grid, как в справочнике) ---
root = tk.Tk()
root.title("giga ude - Гид по микроконтроллерам")
root.geometry("850x650")

# Настраиваем сетку, чтобы фреймы растягивались (из справочника)
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)

# ================= ЛЕВАЯ ПАНЕЛЬ (Устройства) =================
# Используем bg, bd и relief, как учит справочник
left_frame = tk.Frame(root, bg="#e0f7fa", bd=2, relief=tk.RAISED)
left_frame.grid(row=0, column=0, rowspan=2, sticky="ns", padx=5, pady=5)

# Внутри фрейма используем pack (из справочника)
btn_arduino = tk.Button(left_frame, text="Arduino", width=12, height=2, font=("Arial", 12),
                        command=lambda: select_device("Arduino"))
btn_arduino.pack(pady=10, padx=10, fill=tk.X)

btn_stm32 = tk.Button(left_frame, text="STM32", width=12, height=2, font=("Arial", 12),
                      command=lambda: select_device("STM32"))
btn_stm32.pack(pady=10, padx=10, fill=tk.X)

btn_pic = tk.Button(left_frame, text="PIC", width=12, height=2, font=("Arial", 12),
                    command=lambda: select_device("PIC"))
btn_pic.pack(pady=10, padx=10, fill=tk.X)

# ================= ЦЕНТРАЛЬНАЯ ПАНЕЛЬ (Картинка) =================
center_frame = tk.Frame(root, bg="#ffffff", bd=5, relief=tk.SUNKEN)
center_frame.grid(row=0, column=1, sticky="nsew", padx=5, pady=5)

# Метка для вывода изображения (pack с expand, как в примере)
image_label = tk.Label(center_frame, text="Загрузка...", bg="#ffffff", font=("Arial", 14))
image_label.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)

# ================= НИЖНЯЯ ПАНЕЛЬ (Категории) =================
bottom_frame = tk.Frame(root, bg="#f5f5f5", bd=2, relief=tk.FLAT)
bottom_frame.grid(row=1, column=1, sticky="ew", padx=5, pady=5)

# Кнопки категорий (pack side=LEFT, как в справочнике)
btn_ris = tk.Button(bottom_frame, text="Рисунок", width=14, height=2, font=("Arial", 12),
                    command=lambda: select_category("Рисунок"))
btn_ris.pack(side=tk.LEFT, padx=5, pady=5, expand=True, fill=tk.X)

btn_shema = tk.Button(bottom_frame, text="Схема", width=14, height=2, font=("Arial", 12),
                      command=lambda: select_category("Схема"))
btn_shema.pack(side=tk.LEFT, padx=5, pady=5, expand=True, fill=tk.X)

btn_pitanie = tk.Button(bottom_frame, text="Питание", width=14, height=2, font=("Arial", 12),
                        command=lambda: select_category("Питание"))
btn_pitanie.pack(side=tk.LEFT, padx=5, pady=5, expand=True, fill=tk.X)

btn_har = tk.Button(bottom_frame, text="Характеристики", width=14, height=2, font=("Arial", 12),
                    command=lambda: select_category("Характеристики"))
btn_har.pack(side=tk.LEFT, padx=5, pady=5, expand=True, fill=tk.X)

# Первый запуск отрисовки картинки
update_image()

# Запуск главного цикла
root.mainloop()