Загрузка данных
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()