67 lines
2.0 KiB
Python
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()
|