Исправления:

1. База знаний
+ кнопка активна
+ данные взяты из конфига и бд
2. Изображения
+ нет абсолютных путей
This commit is contained in:
Xatiko 2024-12-05 21:26:36 +03:00
parent 9c5feb43af
commit b5e3fd95b6
5 changed files with 2087 additions and 25 deletions

View file

@ -1,3 +1,12 @@
import os
# Базовая директория проекта
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# Директория с ресурсами
ASSETS_DIR = os.path.join(BASE_DIR, "assets")
DOGS_DIR = os.path.join(ASSETS_DIR, "dogs")
# Админ-интерфейс (тёмные цвета) # Админ-интерфейс (тёмные цвета)
ADMIN_BACKGROUND_COLOR = "#403d49" ADMIN_BACKGROUND_COLOR = "#403d49"
ADMIN_PRIMARY_COLOR = "#ff6347" ADMIN_PRIMARY_COLOR = "#ff6347"
@ -39,68 +48,69 @@ ADMIN_LOGIN = "admin"
ADMIN_PASSWORD = "admin123" ADMIN_PASSWORD = "admin123"
# База данных # База данных
DATABASE_URL = "sqlite:///F:/Projects/Dog_Academy/database/DogAcademy.db" # Абсолютный путь DATABASE_URL = f"sqlite:///{os.path.join(BASE_DIR, 'database', 'DogAcademy.db')}"
# Иконки # Пути к ресурсам
SETTINGS_IMG = "assets/settings.png" SETTINGS_IMG = os.path.join(ASSETS_DIR, "settings.png")
LOGO = "F:/Projects/Dog_Academy/assets/logo.png" LOGO = os.path.join(ASSETS_DIR, "logo.png")
BACKGROUND_GAME = "F:/Projects/Dog_Academy/assets/background.png" BACKGROUND_GAME = os.path.join(ASSETS_DIR, "background.png")
BONE = "F:/Projects/Dog_Academy/assets/bone.png" BONE = os.path.join(ASSETS_DIR, "bone.png")
LOCK = "F:/Projects/Dog_Academy/assets/lock.png" LOCK = os.path.join(ASSETS_DIR, "lock.png")
UNLOCK = "F:/Projects/Dog_Academy/assets/unlock.png" UNLOCK = os.path.join(ASSETS_DIR, "unlock.png")
DONE = "F:/Projects/Dog_Academy/assets/done.png" DONE = os.path.join(ASSETS_DIR, "done.png")
# Собаки # Пути к изображениям собак
CHIHUAHUA = "F:/Projects/Dog_Academy/assets/dogs/Chihuahua.png" CHIHUAHUA = os.path.join(DOGS_DIR, "Chihuahua.png")
CORGI = "F:/Projects/Dog_Academy/assets/dogs/Corgi.png" CORGI = os.path.join(DOGS_DIR, "Corgi.png")
RETRIEVER = "F:/Projects/Dog_Academy/assets/dogs/Golden_Retriever.png" RETRIEVER = os.path.join(DOGS_DIR, "Golden_Retriever.png")
HUSKY = "F:/Projects/Dog_Academy/assets/dogs/Husky.png" HUSKY = os.path.join(DOGS_DIR, "Husky.png")
POMERANIAN = "F:/Projects/Dog_Academy/assets/dogs/Pomeranian.png" POMERANIAN = os.path.join(DOGS_DIR, "Pomeranian.png")
PUG = "F:/Projects/Dog_Academy/assets/dogs/Pug.png" PUG = os.path.join(DOGS_DIR, "Pug.png")
YORKSHIRE = "F:/Projects/Dog_Academy/assets/dogs/Yorkshire_Terrier.png" YORKSHIRE = os.path.join(DOGS_DIR, "Yorkshire_Terrier.png")
# Данные о характерах собак
DOG_CHARACTERS = { DOG_CHARACTERS = {
"Chihuahua": { "Chihuahua": {
"image": CHIHUAHUA, "image": CHIHUAHUA,
"speed": 8, "speed": 8,
"endurance": 5, "endurance": 5,
"special_ability": "Fast Dodge", # Уклонение от препятствий "special_ability": "Fast Dodge",
}, },
"Corgi": { "Corgi": {
"image": CORGI, "image": CORGI,
"speed": 6, "speed": 6,
"endurance": 7, "endurance": 7,
"special_ability": "Extra Jump", # Дополнительный прыжок "special_ability": "Extra Jump",
}, },
"Golden Retriever": { "Golden Retriever": {
"image": RETRIEVER, "image": RETRIEVER,
"speed": 7, "speed": 7,
"endurance": 8, "endurance": 8,
"special_ability": "Bonus Points", # Увеличенные очки за правильные ответы "special_ability": "Bonus Points",
}, },
"Husky": { "Husky": {
"image": HUSKY, "image": HUSKY,
"speed": 9, "speed": 9,
"endurance": 6, "endurance": 6,
"special_ability": "Speed Boost", # Ускорение "special_ability": "Speed Boost",
}, },
"Pomeranian": { "Pomeranian": {
"image": POMERANIAN, "image": POMERANIAN,
"speed": 7, "speed": 7,
"endurance": 4, "endurance": 4,
"special_ability": "Charm", # Уменьшает штраф за ошибки "special_ability": "Charm",
}, },
"Pug": { "Pug": {
"image": PUG, "image": PUG,
"speed": 5, "speed": 5,
"endurance": 9, "endurance": 9,
"special_ability": "Resilience", # Сохраняет здоровье при столкновениях "special_ability": "Resilience",
}, },
"Yorkshire Terrier": { "Yorkshire Terrier": {
"image": YORKSHIRE, "image": YORKSHIRE,
"speed": 6, "speed": 6,
"endurance": 5, "endurance": 5,
"special_ability": "Quick Recovery", # Быстрое восстановление характеристик "special_ability": "Quick Recovery",
}, },
} }

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,107 @@
import os
import tkinter as tk
from PIL import Image, ImageTk
from config import DOG_CHARACTERS, BASE_DIR
from src.utils import clear_frame
from database.info.Dogs_table import get_all_dogs
def knowledge_ui(root, user_app):
"""Интерфейс базы знаний о породах собак."""
clear_frame(root)
# Загружаем данные о породах собак из базы данных
dog_data = get_all_dogs()
if not dog_data:
tk.Label(root, text="Не удалось загрузить данные о породах.", font=("Arial", 20)).pack()
return
index = {"current": 0} # Индекс текущей породы
def update_content():
"""Обновляет содержимое для текущей породы."""
current_dog = dog_data[index["current"]]
breed = current_dog.breed
# Загружаем информацию из DOG_CHARACTERS
dog_info = DOG_CHARACTERS.get(breed)
if not dog_info:
title_label.config(text="Нет данных о породе.")
image_label.config(image=None)
image_label.image = None
characteristics_label.config(text="")
behavior_label.config(text="")
care_label.config(text="")
admin_comments_label.config(text="")
return
# Загружаем изображение
image_path = dog_info["image"]
if os.path.exists(image_path):
image = Image.open(image_path)
image = image.resize((200, 200), Image.Resampling.LANCZOS)
photo = ImageTk.PhotoImage(image)
image_label.config(image=photo)
image_label.image = photo
else:
image_label.config(image=None)
image_label.image = None
# Обновляем текст
title_label.config(text=breed)
characteristics_label.config(text=f"Характеристики: {current_dog.characteristics}")
behavior_label.config(text=f"Поведение: {current_dog.behavior}")
care_label.config(text=f"Уход: {current_dog.care_info}")
admin_comments_label.config(text=f"Комментарии: {current_dog.admin_comments}")
def next_breed():
"""Переход к следующей породе."""
index["current"] = (index["current"] + 1) % len(dog_data)
update_content()
def previous_breed():
"""Переход к предыдущей породе."""
index["current"] = (index["current"] - 1) % len(dog_data)
update_content()
# Основной интерфейс
frame = tk.Frame(root, bg="#f0f0f0")
frame.pack(fill=tk.BOTH, expand=True)
title_label = tk.Label(frame, text="", font=("Arial", 20), bg="#f0f0f0")
title_label.pack(pady=10)
image_label = tk.Label(frame, bg="#f0f0f0")
image_label.pack(pady=10)
characteristics_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
characteristics_label.pack(pady=5)
behavior_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
behavior_label.pack(pady=5)
care_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
care_label.pack(pady=5)
admin_comments_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
admin_comments_label.pack(pady=5)
# Кнопки навигации
btn_frame = tk.Frame(frame, bg="#f0f0f0")
btn_frame.pack(pady=20)
back_button = tk.Button(
btn_frame,
text="Назад",
font=("Arial", 14),
command=lambda: [clear_frame(root), user_app.show_user_dashboard()]
)
back_button.pack(side=tk.LEFT, padx=5)
prev_button = tk.Button(btn_frame, text="Предыдущая", font=("Arial", 14), command=previous_breed)
prev_button.pack(side=tk.LEFT, padx=5)
next_button = tk.Button(btn_frame, text="Следующая", font=("Arial", 14), command=next_breed)
next_button.pack(side=tk.LEFT, padx=5)
update_content() # Инициализация первого отображения

View file

@ -8,6 +8,7 @@ import math
from config import EXIT_BUTTON_WIDTH, EXIT_BUTTON_HEIGHT, BUTTON_COLOR_EXIT from config import EXIT_BUTTON_WIDTH, EXIT_BUTTON_HEIGHT, BUTTON_COLOR_EXIT
from src.ui.user_ui.game_ui import GameUI from src.ui.user_ui.game_ui import GameUI
from src.ui.user_ui.knowledge_ui import knowledge_ui
from src.ui.user_ui.profile_ui import profile_ui from src.ui.user_ui.profile_ui import profile_ui
from src.utils import clear_frame from src.utils import clear_frame
@ -87,7 +88,8 @@ class UserApp:
relief=tk.FLAT, relief=tk.FLAT,
padx=20, padx=20,
pady=10, pady=10,
state=tk.DISABLED # Делаем кнопку некликабельной state=tk.NORMAL, # Делаем кнопку активной
command=lambda: knowledge_ui(self.root, self) # Подключаем knowledge_ui
) )
knowledge_button.pack(side=tk.LEFT, padx=20) knowledge_button.pack(side=tk.LEFT, padx=20)