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


Приветствую. 
В основном файле данная страница состоит из трех основных частей: левой (график), правой с элементами управления и низом (результаты). 
Необходимо в файле правую сторону заменить на «аккордеон» ниже привожу код. Это как образец – то, как должно выглядеть. Функционал, который сейчас имеется в правой стороне весь вставить в верхний заголовок аккордеона. Распределять и добавлять функционал будем потом, сейчас главное, чтобы все заработало.

import tkinter as tk

def show_content(title):
    """
    Показывает контент выбранного заголовка и скрывает предыдущий.
    Исправлена ошибка UnboundLocalError.
    """
    # --- ИНИЦИАЛИЗАЦИЯ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ В НАЧАЛЕ ФУНКЦИИ ---
    # Это ключевое изменение, которое решает ошибку.
    global current_title
    global current_frame

    # Если нажали на уже активную кнопку - сворачиваем её контент
    if current_title == title:
        if current_frame:
            current_frame.destroy()
            current_frame = None
        buttons[title].config(text=f"+ {title}", bg='SystemButtonFace')
        current_title = None
        return

    # Если был открыт другой контент, сначала скрываем его
    if current_title:
        if current_frame:
            current_frame.destroy()
        buttons[current_title].config(text=f"+ {current_title}", bg='SystemButtonFace')

    # Создаем новый фрейм для контента
    new_frame = tk.Frame(content_frame, bg="#f0f0f0")
    new_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
    
    # Добавляем вашу надпись-плейсхолдер
    tk.Label(new_frame, text="Мои элементы управления со своим функционалом").pack(pady=20)

    # Обновляем глобальные переменные
    current_frame = new_frame
    current_title = title

    # Меняем текст новой кнопки на '-' и подсвечиваем её
    buttons[title].config(text=f"- {title}", bg='#e0e0e0')


# --- Основная настройка окна ---
root = tk.Tk()
root.title("Настройки прогнозирования")
root.geometry("400x500")

# --- Создаем два главных фрейма: для заголовков и для общего контента ---
header_frame = tk.Frame(root)
header_frame.pack(fill=tk.X, padx=10, pady=(10, 0))

content_frame = tk.Frame(root, bg="#f0f0f0", bd=2, relief="groove")
content_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=(0, 10))

# --- Словари и переменные для отслеживания состояния ---
panel_names = ["Общие настройки", "Настройки симуляции", "Настройки агрегирования", "Настройка статистики", "Настройка печати"]
buttons = {}       # Словарь для хранения кнопок-заголовков

# Переменные для отслеживания текущего открытого контента
current_title = None 
current_frame = None 

# --- Создаем кнопки-заголовки ---
for name in panel_names:
    btn = tk.Button(
        header_frame,
        text=f"+ {name}",
        relief="flat",
        command=lambda t=name: show_content(t) 
    )
    btn.pack(anchor='w', padx=(10, 0), pady=2) 
    buttons[name] = btn

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


Следующим файлом вышлю основной файл.
Пока не получишь оба файла ничего не предпринимай.