Приветствую.
В основном файле данная страница состоит из трех основных частей: левой (график), правой с элементами управления и низом (результаты).
Необходимо в файле правую сторону заменить на «аккордеон» ниже привожу код. Это как образец – то, как должно выглядеть. Функционал, который сейчас имеется в правой стороне весь вставить в верхний заголовок аккордеона. Распределять и добавлять функционал будем потом, сейчас главное, чтобы все заработало.
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()
Следующим файлом вышлю основной файл.
Пока не получишь оба файла ничего не предпринимай.