Обновление: добавлено главное меню игры, а также обновлена структура проекта: пользовательский интерфейс разделён на модули (main_menu, profile_ui, shop_ui, game_ui, knowledge_ui, common_ui), функции вынесены в отдельные файлы (пока что функционал не написан, только интерфейс главного меню).

This commit is contained in:
Xatiko 2024-11-25 22:44:23 +03:00
parent 9b9b459d8f
commit 989a9056e7
23 changed files with 206 additions and 60 deletions

View file

@ -3,7 +3,7 @@ from tkinter import messagebox
from config import BACKGROUND_COLOR, PRIMARY_COLOR, BUTTON_COLOR, BUTTON_TEXT_COLOR, FONT, BIG_FONT, ADMIN_LOGIN, ADMIN_PASSWORD
from src.ui.admin_ui import AdminApp # Импорт интерфейса администратора
from database.db_events import create_user, check_user
from src.ui.user_ui import UserApp
from src.ui.user_ui.main_menu import UserApp
class DogAcademyApp:
def __init__(self, root):
@ -217,5 +217,6 @@ class DogAcademyApp:
messagebox.showerror("Ошибка", "Пожалуйста, заполните все поля.")
def show_user_dashboard(self):
self.clear_frame()
"""Перейти к главному меню пользователя после авторизации."""
UserApp(self.root, self)

View file

@ -1,56 +0,0 @@
import tkinter as tk
from config import BACKGROUND_COLOR, PRIMARY_COLOR, BUTTON_COLOR, BUTTON_TEXT_COLOR, FONT
class UserApp:
def __init__(self, root, dog_academy_app):
self.root = root
self.dog_academy_app = dog_academy_app # Сохраняем ссылку на DogAcademyApp
self.show_user_dashboard()
def show_user_dashboard(self):
"""Показать интерфейс пользователя."""
self.clear_frame()
self.current_frame = tk.Frame(self.root, bg=BACKGROUND_COLOR)
self.current_frame.pack(expand=True)
# Заголовок
title = tk.Label(
self.current_frame,
text="Главное меню",
bg=BACKGROUND_COLOR,
fg=PRIMARY_COLOR,
font=FONT,
)
title.pack(pady=50)
# Кнопка "Играть"
play_button = tk.Button(
self.current_frame,
text="Играть",
bg=BUTTON_COLOR,
fg=BUTTON_TEXT_COLOR,
font=FONT,
command=self.play_game,
)
play_button.pack(pady=20)
# Кнопка "Выход"
logout_button = tk.Button(
self.current_frame,
text="Выход",
bg=BUTTON_COLOR,
fg=BUTTON_TEXT_COLOR,
font=FONT,
command=self.dog_academy_app.show_main_menu, # Вызываем метод из DogAcademyApp
)
logout_button.pack(pady=20)
def play_game(self):
"""Запуск игры."""
# TODO: Логика игры
pass
def clear_frame(self):
"""Очистить текущий фрейм."""
if hasattr(self, 'current_frame') and self.current_frame:
self.current_frame.destroy()

Binary file not shown.

View file

View file

View file

View file

@ -0,0 +1,93 @@
import tkinter as tk
from config import (
BACKGROUND_COLOR_USER,
TOP_PANEL_COLOR_USER,
BUTTON_COLOR_PROFILE_USER,
BUTTON_COLOR_PLAY_USER,
BUTTON_COLOR_EXIT_USER,
BUTTON_TEXT_COLOR_USER,
FONT_USER,
BIG_FONT_USER,
BUTTON_RADIUS_USER,
EXIT_BUTTON_SIZE_USER,
)
class UserApp:
def __init__(self, root, auth_ui):
self.root = root
self.auth_ui = auth_ui
self.root.configure(bg=BACKGROUND_COLOR_USER)
self.root.geometry("1920x1080") # Разрешение окна
self.root.title("Собачья академия")
print("Главное меню активно") # Лог при открытии меню
self.show_user_dashboard()
def show_user_dashboard(self):
"""Показать интерфейс пользователя."""
# Верхняя панель
top_panel = tk.Frame(self.root, bg=TOP_PANEL_COLOR_USER, height=100)
top_panel.pack(fill=tk.X, side=tk.TOP)
# Кнопки на верхней панели
for text, command in [("Профиль", self.show_profile), ("Магазин", self.show_shop), ("База знаний", self.show_knowledge)]:
button = tk.Button(
top_panel,
text=text,
bg=BUTTON_COLOR_PROFILE_USER,
fg=BUTTON_TEXT_COLOR_USER,
font=FONT_USER,
relief=tk.FLAT,
padx=20,
pady=10,
command=command,
)
button.pack(side=tk.LEFT, padx=20)
# Кнопка "Играть" в центре
play_button = tk.Button(
self.root,
text="Играть",
bg=BUTTON_COLOR_PLAY_USER,
fg=BUTTON_TEXT_COLOR_USER,
font=BIG_FONT_USER,
relief=tk.FLAT,
height=2,
width=10,
command=self.play_game,
)
play_button.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
# Кнопка "Выход" в правом нижнем углу
exit_button = tk.Button(
self.root,
text="Выход",
bg=BUTTON_COLOR_EXIT_USER,
fg=BUTTON_TEXT_COLOR_USER,
font=FONT_USER,
width=EXIT_BUTTON_SIZE_USER[0] // 10,
height=EXIT_BUTTON_SIZE_USER[1] // 10,
command=self.exit_app,
)
exit_button.place(relx=1.0, rely=1.0, x=-20, y=-20, anchor=tk.SE)
def play_game(self):
"""Заглушка для игры."""
print("Запуск игры...")
def exit_app(self):
"""Заглушка для выхода."""
print("Приложение закрыто")
self.root.quit()
def show_profile(self):
"""Заглушка для профиля."""
print("Переход в профиль...")
def show_shop(self):
"""Заглушка для магазина."""
print("Переход в магазин...")
def show_knowledge(self):
"""Заглушка для базы знаний."""
print("Переход в базу знаний...")

View file

View file