From 9d995480a67a59d230f4af0191975f3bd2e87284 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 26 Sep 2025 04:34:16 +0300 Subject: [PATCH] patch home --- app/ui/views/yobble_home_view.py | 104 +++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 34 deletions(-) diff --git a/app/ui/views/yobble_home_view.py b/app/ui/views/yobble_home_view.py index 3899b8d..6e6acff 100644 --- a/app/ui/views/yobble_home_view.py +++ b/app/ui/views/yobble_home_view.py @@ -1,9 +1,9 @@ from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QFrame, - QStackedWidget, QSpacerItem, QSizePolicy + QStackedWidget, QSpacerItem, QSizePolicy, QGraphicsDropShadowEffect ) from PySide6.QtCore import Qt, QSize -from PySide6.QtGui import QIcon +from PySide6.QtGui import QIcon, QColor class YobbleHomeView(QWidget): def __init__(self, username: str): @@ -23,7 +23,7 @@ class YobbleHomeView(QWidget): # 2. Центральная область контента self.content_stack = QStackedWidget() self.setup_content_pages() - main_layout.addWidget(self.content_stack) + main_layout.addWidget(self.content_stack, 1) # Растягиваем контент # 3. Нижняя панель навигации bottom_bar = self.create_bottom_bar() @@ -51,31 +51,31 @@ class YobbleHomeView(QWidget): return top_bar_widget def create_bottom_bar(self): - """Создает нижнюю панель навигации.""" + """Создает нижнюю панель навигации в стиле SwiftUI.""" bottom_bar_widget = QWidget() bottom_bar_widget.setObjectName("BottomBar") - # Устанавливаем высоту и убираем лишние отступы, чтобы текст не обрезался + bottom_bar_layout = QHBoxLayout(bottom_bar_widget) - bottom_bar_layout.setContentsMargins(10, 0, 10, 5) # Уменьшаем верхний и нижний отступы + bottom_bar_layout.setContentsMargins(10, 0, 10, 0) bottom_bar_layout.setSpacing(10) # Создаем кнопки - btn_feed = self.create_tab_button("📄", "Лента", 0) + btn_feed = self.create_tab_button("☰", "Лента", 0) btn_search = self.create_tab_button("🔍", "Поиск", 1) + btn_create = self.create_create_button() btn_chats = self.create_tab_button("💬", "Чаты", 2) btn_profile = self.create_tab_button("👤", "Лицо", 3) - # Центральная кнопка "Создать" - btn_create = QPushButton("+") - btn_create.setObjectName("CreateButton") - btn_create.setFixedSize(50, 50) - # Добавляем кнопки в макет bottom_bar_layout.addWidget(btn_feed) bottom_bar_layout.addWidget(btn_search) bottom_bar_layout.addWidget(btn_create) bottom_bar_layout.addWidget(btn_chats) bottom_bar_layout.addWidget(btn_profile) + + # Устанавливаем политику размеров, чтобы кнопки вкладок растягивались + for btn in [btn_feed, btn_search, btn_chats, btn_profile]: + btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) # Устанавливаем начальную активную вкладку self.update_tab_selection(2) # Чаты по умолчанию @@ -85,10 +85,11 @@ class YobbleHomeView(QWidget): """Фабричный метод для создания кнопок вкладок.""" button = QPushButton() button.setObjectName("TabButton") + button.setCursor(Qt.PointingHandCursor) layout = QVBoxLayout(button) layout.setContentsMargins(0, 5, 0, 5) - layout.setSpacing(2) + layout.setSpacing(4) icon_label = QLabel(icon_text) icon_label.setAlignment(Qt.AlignCenter) @@ -105,6 +106,23 @@ class YobbleHomeView(QWidget): button.clicked.connect(lambda: self.on_tab_button_clicked(index)) return button + def create_create_button(self): + """Создает центральную кнопку 'Создать'.""" + button = QPushButton("+") + button.setObjectName("CreateButton") + button.setFixedSize(56, 56) + button.setCursor(Qt.PointingHandCursor) + + # Эффект тени + shadow = QGraphicsDropShadowEffect(self) + shadow.setBlurRadius(18) + shadow.setColor(QColor(0, 0, 0, 100)) + shadow.setOffset(0, 3) + button.setGraphicsEffect(shadow) + + # button.clicked.connect(self.on_create_clicked) # Подключите свой слот + return button + def setup_content_pages(self): """Создает страницы-заглушки для QStackedWidget.""" self.content_stack.addWidget(QLabel("Контент Ленты")) @@ -127,20 +145,22 @@ class YobbleHomeView(QWidget): if not bottom_bar: return for button in bottom_bar.findChildren(QPushButton): - if button.property("tab_index") == selected_index: - button.setProperty("selected", True) - else: - button.setProperty("selected", False) - - # Обновляем стиль, чтобы изменения применились - button.style().unpolish(button) - button.style().polish(button) + is_tab_button = button.property("tab_index") is not None + if is_tab_button: + if button.property("tab_index") == selected_index: + button.setProperty("selected", True) + else: + button.setProperty("selected", False) + + # Обновляем стиль, чтобы изменения применились + button.style().unpolish(button) + button.style().polish(button) def get_stylesheet(self): """Возвращает QSS стили для компонента.""" return """ YobbleHomeView { - background-color: white; /* Фон для основного виджета */ + background-color: white; } /* Верхняя панель */ #TopBar { @@ -159,8 +179,10 @@ class YobbleHomeView(QWidget): /* Нижняя панель */ #BottomBar { - background-color: #f5f5f5; - border-top: 1px solid #e0e0e0; + background-color: #f8f8f8; + border-top: 1px solid #e7e7e7; + padding-top: 5px; + padding-bottom: 15px; /* Место для тени и отступа */ } /* Кнопки вкладок */ @@ -168,12 +190,12 @@ class YobbleHomeView(QWidget): background-color: transparent; border: none; padding: 5px; - color: #888; } + #TabButton #TabIcon { color: #888888; } + #TabButton #TabText { color: #888888; } + + #TabButton[selected="true"] #TabIcon, #TabButton[selected="true"] #TabText { - color: #007AFF; /* Яркий синий для активной вкладки */ - } - #TabButton[selected="true"] #TabIcon { color: #007AFF; } #TabIcon { font-size: 22px; } @@ -181,14 +203,28 @@ class YobbleHomeView(QWidget): /* Центральная кнопка "Создать" */ #CreateButton { - background-color: #007AFF; color: white; - font-size: 24px; - font-weight: bold; + font-size: 30px; + font-weight: 300; border: none; - border-radius: 25px; /* Делает ее круглой */ + border-radius: 28px; /* 56px / 2 */ + background-color: qlineargradient( + x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #007AFF, stop: 1 #0056b3 + ); + /* "Приподнимаем" кнопку */ + margin-bottom: 20px; } #CreateButton:hover { - background-color: #0056b3; + background-color: qlineargradient( + x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #0088FF, stop: 1 #0066c3 + ); } - """ + #CreateButton:pressed { + background-color: qlineargradient( + x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #0056b3, stop: 1 #004493 + ); + } + """ \ No newline at end of file