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

1# /////////////////////////////////////////////////////////////// 

2# WIDGETS.CORE.PAGE_CONTAINER - Page container widget 

3# Project: ezqt_app 

4# /////////////////////////////////////////////////////////////// 

5 

6"""PageContainer widget with stacked widget page management.""" 

7 

8from __future__ import annotations 

9 

10# /////////////////////////////////////////////////////////////// 

11# IMPORTS 

12# /////////////////////////////////////////////////////////////// 

13# Third-party imports 

14from PySide6.QtWidgets import QFrame, QStackedWidget, QVBoxLayout, QWidget 

15 

16 

17# /////////////////////////////////////////////////////////////// 

18# CLASSES 

19# /////////////////////////////////////////////////////////////// 

20class PageContainer(QFrame): 

21 """ 

22 Page container with stacked widget management. 

23 

24 This class provides a container to manage multiple pages 

25 within a central receptacle using a QStackedWidget. 

26 """ 

27 

28 def __init__(self, parent: QWidget | None = None) -> None: 

29 """ 

30 Initialize the page container. 

31 

32 Parameters 

33 ---------- 

34 parent : QWidget, optional 

35 The parent widget (default: None). 

36 """ 

37 super().__init__(parent) 

38 self.pages: dict[str, QWidget] = {} 

39 

40 # ////// SETUP WIDGET PROPERTIES 

41 self.setObjectName("pages_container") 

42 self.setFrameShape(QFrame.Shape.NoFrame) 

43 self.setFrameShadow(QFrame.Shadow.Raised) 

44 

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) 

50 

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) 

55 

56 # /////////////////////////////////////////////////////////////// 

57 # PUBLIC API 

58 

59 def add_page(self, name: str) -> QWidget: 

60 """ 

61 Add a new page to the container. 

62 

63 Parameters 

64 ---------- 

65 name : str 

66 The name of the page to add. 

67 

68 Returns 

69 ------- 

70 QWidget 

71 The created page widget. 

72 """ 

73 page = QWidget() 

74 page.setObjectName(f"page_{name}") 

75 

76 self._stacked_widget.addWidget(page) 

77 self.pages[name] = page 

78 

79 return page 

80 

81 def set_current_widget(self, widget: QWidget) -> None: 

82 """ 

83 Set the current visible page. 

84 

85 Parameters 

86 ---------- 

87 widget : QWidget 

88 The page widget to display. 

89 """ 

90 self._stacked_widget.setCurrentWidget(widget) 

91 

92 def get_stacked_widget(self) -> QStackedWidget: 

93 """ 

94 Access the internal stacked widget. 

95 

96 Note: Use set_current_widget for standard navigation. 

97 """ 

98 return self._stacked_widget 

99 

100 

101# /////////////////////////////////////////////////////////////// 

102# PUBLIC API 

103# /////////////////////////////////////////////////////////////// 

104__all__ = ["PageContainer"]