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


import customtkinter as ctk
from PIL import Image
import os

ctk.set_appearance_mode("Dark")
ctk.set_default_color_theme("blue")

class BrawlBotMenu(ctk.CTk):
    def __init__(self):
        super().__init__()

        # Уменьшили высоту окна до 580, так как логов больше нет
        self.title("Brawl Stars Bot Menu v0.3")
        self.geometry("1140x580") 
        self.resizable(False, False)
        
        # Убираем белые поля
        self.configure(fg_color="#1e1e24")

        self.assets_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "assets")
        self.brawlers_dir = os.path.join(self.assets_path, "brawlers")

        # Главный контейнер
        self.main_frame = ctk.CTkFrame(self, width=1100, height=540, fg_color="#1e1e24", border_width=0) 
        self.main_frame.place(relx=0.5, rely=0.5, anchor="center")

        # Заголовок (можете поменять "Impact" на свой шрифт)
        self.title_label = ctk.CTkLabel(
            self.main_frame, 
            text="BRAWL BOT CONTROLLER", 
            font=ctk.CTkFont(family="Impact", size=32, weight="bold"), 
            text_color="#ffcc00"
        )
        self.title_label.pack(pady=20)

        self.selected_brawler = None

        # Раздел выбора бойцов
        self.brawler_label = ctk.CTkLabel(
            self.main_frame, 
            text="ВЫБЕРИТЕ БОЙЦА ДЛЯ ПРОКАЧКИ:", 
            font=ctk.CTkFont(family="Arial", size=14, weight="bold"),
            text_color="#ffffff"
        )
        self.brawler_label.pack(pady=5)

        # ЗОНА ПРОКРУТКИ 
        self.scroll_frame = ctk.CTkScrollableFrame(self.main_frame, width=1040, height=240, fg_color="transparent")
        self.scroll_frame.pack(pady=5)

        self.brawler_buttons = {}
        self.load_brawlers_automatically()

        # Статус выбора бойца
        self.status_label = ctk.CTkLabel(
            self.main_frame, 
            text="Боец не выбран", 
            text_color="#ff4500", 
            font=ctk.CTkFont(family="Arial", size=14, slant="italic")
        )
        self.status_label.pack(pady=5)

        # Поля ввода кубков
        self.cups_frame = ctk.CTkFrame(self.main_frame, fg_color="transparent")
        self.cups_frame.pack(pady=10)

        self.current_cups = ctk.CTkEntry(
            self.cups_frame, 
            width=150, 
            placeholder_text="Текущие кубки",
            font=ctk.CTkFont(family="Arial", size=13)
        )
        self.current_cups.grid(row=0, column=0, padx=20, pady=5)

        self.target_cups = ctk.CTkEntry(
            self.cups_frame, 
            width=150, 
            placeholder_text="Цель кубков",
            font=ctk.CTkFont(family="Arial", size=13)
        )
        self.target_cups.grid(row=0, column=1, padx=20, pady=5)

        # Кнопка СТАРТ
        self.start_button = ctk.CTkButton(
            self.main_frame, 
            text="ПОДТВЕРДИТЬ ВЫБРАННЫЕ НАСТРОЙКИ", 
            fg_color="#00cc66", 
            hover_color="#00994d", 
            font=ctk.CTkFont(family="Arial", size=15, weight="bold"), 
            command=self.click_start
        )
        self.start_button.pack(pady=15, ipadx=15, ipady=5)

    def load_brawlers_automatically(self):
        """Сканирует папку assets/brawlers и строит сетку кнопок по 10 штук в ряд"""
        if not os.path.exists(self.brawlers_dir):
            return

        files = [f for f in os.listdir(self.brawlers_dir) if f.endswith('.png')]
        files.sort()

        for index, filename in enumerate(files):
            brawler_name = filename.replace('.png', '').capitalize()
            img_path = os.path.join(self.brawlers_dir, filename)

            row = index // 10
            col = index % 10

            try:
                icon_img = ctk.CTkImage(light_image=Image.open(img_path), size=(82, 82))
            except Exception:
                icon_img = None

            btn = ctk.CTkButton(
                self.scroll_frame, 
                text=brawler_name if not icon_img else "", 
                image=icon_img,
                width=92, 
                height=92,
                fg_color="#2b2b36",
                hover_color="#3e3e4f",
                command=lambda name=brawler_name: self.select_brawler(name)
            )
            btn.grid(row=row, column=col, padx=5, pady=5)
            self.brawler_buttons[brawler_name] = btn

    def select_brawler(self, name):
        for b_name, btn in self.brawler_buttons.items():
            btn.configure(fg_color="#2b2b36", border_width=0)
        self.selected_brawler = name
        self.brawler_buttons[name].configure(fg_color="#1f538d", border_width=3, border_color="#ffcc00")
        self.status_label.configure(text=f"Выбран: {name}", text_color="#00ff88")

    def click_start(self):
        if not self.selected_brawler:
            print("Ошибка: Сначала выберите бойца!")
            return
        curr = self.current_cups.get()
        targ = self.target_cups.get()
        if not curr.isdigit() or not targ.isdigit():
            print("Ошибка: Укажите кубки числами!")
            return
        
        print(f"Успешно сохранено в памяти! Боец: {self.selected_brawler}, Кубки: {curr} -> {targ}")

if __name__ == "__main__":
    app = BrawlBotMenu()
    app.mainloop()