Исправления:
1. База знаний + кнопка активна + данные взяты из конфига и бд 2. Изображения + нет абсолютных путей
This commit is contained in:
parent
9c5feb43af
commit
b5e3fd95b6
5 changed files with 2087 additions and 25 deletions
58
config.py
58
config.py
|
|
@ -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.
1943
logs/logfile.log
1943
logs/logfile.log
File diff suppressed because it is too large
Load diff
107
src/ui/user_ui/knowledge_ui.py
Normal file
107
src/ui/user_ui/knowledge_ui.py
Normal 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() # Инициализация первого отображения
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue