Files
leonpan-pc/app/view/widgets/stacked_widget.py
2025-10-29 22:20:21 +08:00

67 lines
2.0 KiB
Python

# coding:utf-8
from PyQt6.QtCore import Qt, pyqtSignal, QEasingCurve
from PyQt6.QtWidgets import QFrame, QHBoxLayout, QAbstractScrollArea
from qfluentwidgets.components.widgets.stacked_widget import PopUpAniStackedWidget
class StackedWidget(QFrame):
""" Stacked widget """
currentChanged = pyqtSignal(int)
def __init__(self, parent=None):
super().__init__(parent=parent)
self.hBoxLayout = QHBoxLayout(self)
self.view = PopUpAniStackedWidget(self)
self.hBoxLayout.setContentsMargins(0, 0, 0, 0)
self.hBoxLayout.addWidget(self.view)
self.view.currentChanged.connect(self.currentChanged)
self.setAttribute(Qt.WidgetAttribute.WA_StyledBackground)
def isAnimationEnabled(self) -> bool:
return self.view.isAnimationEnabled
def setAnimationEnabled(self, isEnabled: bool):
"""set whether the pop animation is enabled"""
self.view.setAnimationEnabled(isEnabled)
def addWidget(self, widget):
""" add widget to view """
self.view.addWidget(widget)
def removeWidget(self, widget):
""" remove widget from view """
self.view.removeWidget(widget)
def widget(self, index: int):
return self.view.widget(index)
def setCurrentWidget(self, widget, popOut=True):
if isinstance(widget, QAbstractScrollArea):
widget.verticalScrollBar().setValue(0)
if not popOut:
self.view.setCurrentWidget(widget, duration=300)
else:
self.view.setCurrentWidget(
widget, True, False, 200, QEasingCurve.Type.InQuad)
def setCurrentIndex(self, index, popOut=True):
self.setCurrentWidget(self.view.widget(index), popOut)
def currentIndex(self):
return self.view.currentIndex()
def currentWidget(self):
return self.view.currentWidget()
def indexOf(self, widget):
return self.view.indexOf(widget)
def count(self):
return self.view.count()