Coverage for src / ezqt_app / widgets / core / page_container.py: 96.30%
27 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-26 07:07 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-26 07:07 +0000
1# ///////////////////////////////////////////////////////////////
2# WIDGETS.CORE.PAGE_CONTAINER - Page container widget
3# Project: ezqt_app
4# ///////////////////////////////////////////////////////////////
6"""PageContainer widget with stacked widget page management."""
8from __future__ import annotations
10# ///////////////////////////////////////////////////////////////
11# IMPORTS
12# ///////////////////////////////////////////////////////////////
13# Third-party imports
14from PySide6.QtWidgets import QFrame, QStackedWidget, QVBoxLayout, QWidget
17# ///////////////////////////////////////////////////////////////
18# CLASSES
19# ///////////////////////////////////////////////////////////////
20class PageContainer(QFrame):
21 """
22 Page container with stacked widget management.
24 This class provides a container to manage multiple pages
25 within a central receptacle using a QStackedWidget.
26 """
28 def __init__(self, parent: QWidget | None = None) -> None:
29 """
30 Initialize the page container.
32 Parameters
33 ----------
34 parent : QWidget, optional
35 The parent widget (default: None).
36 """
37 super().__init__(parent)
38 self.pages: dict[str, QWidget] = {}
40 # ////// SETUP WIDGET PROPERTIES
41 self.setObjectName("pages_container")
42 self.setFrameShape(QFrame.Shape.NoFrame)
43 self.setFrameShadow(QFrame.Shadow.Raised)
45 # ////// SETUP MAIN LAYOUT
46 self._layout = QVBoxLayout(self)
47 self._layout.setSpacing(0)
48 self._layout.setObjectName("pages_container_layout")
49 self._layout.setContentsMargins(10, 10, 10, 10)
51 # ////// SETUP STACKED WIDGET
52 self._stacked_widget = QStackedWidget(self)
53 self._stacked_widget.setObjectName("pages_stacked_widget")
54 self._layout.addWidget(self._stacked_widget)
56 # ///////////////////////////////////////////////////////////////
57 # PUBLIC API
59 def add_page(self, name: str) -> QWidget:
60 """
61 Add a new page to the container.
63 Parameters
64 ----------
65 name : str
66 The name of the page to add.
68 Returns
69 -------
70 QWidget
71 The created page widget.
72 """
73 page = QWidget()
74 page.setObjectName(f"page_{name}")
76 self._stacked_widget.addWidget(page)
77 self.pages[name] = page
79 return page
81 def set_current_widget(self, widget: QWidget) -> None:
82 """
83 Set the current visible page.
85 Parameters
86 ----------
87 widget : QWidget
88 The page widget to display.
89 """
90 self._stacked_widget.setCurrentWidget(widget)
92 def get_stacked_widget(self) -> QStackedWidget:
93 """
94 Access the internal stacked widget.
96 Note: Use set_current_widget for standard navigation.
97 """
98 return self._stacked_widget
101# ///////////////////////////////////////////////////////////////
102# PUBLIC API
103# ///////////////////////////////////////////////////////////////
104__all__ = ["PageContainer"]