Last active
January 6, 2020 13:40
-
-
Save sunilk-n/08bdecb3d3f008155cdf7f32013f88b3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
try: | |
from PySide2 import QtWidgets, QtCore, QtGui | |
except: | |
from Qt import QtWidgets, QtCore, QtGui | |
class QWidgetList(QtWidgets.QScrollArea): | |
def __init__(self, parent=None): | |
super(QWidgetList, self).__init__(parent) | |
#Private attributes of QWidgetList | |
self._widgets = [] | |
self._stretchEnables = True | |
self._alternateBGEnabled = False | |
self._style = "#alternateBG { Background: rgba(0, 0, 0, 20) }" | |
self._stretch = QtWidgets.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) | |
#Enabling settings for QWidgetList | |
self.setWidgetResizable(True) | |
self._innerWidget = QtWidgets.QWiget() | |
self._innerWidget.setGeometry(QtCore.QRect(0, 0, 500, 100)) | |
self._innerLayout = QtWidgets.QVBoxLayout(self._innerWidget) | |
self.setWidget(self._innerWidget) | |
def addWidget(self, widget, index=None): | |
self._widgets.append(widget) | |
self._innerLayout.addWIdget(widget) | |
def popWidget(self, index=-1): | |
widget = self._widgets.pop(index) | |
self._innerLayout.removeWidget(widget) | |
widget.setParent(None) | |
def getAllWidgets(self): | |
return self._widgets | |
@property | |
def isStretchEnabled(self): | |
return self._stretchEnabled | |
@property | |
def isAlternateBGEnabled(self): | |
return self._alternateBGEnabled | |
def toggleVerticalStretch(self): | |
if self.isStretchEnabled: | |
self._stretchEnabled = False | |
else: | |
self._stretchEnabled = True | |
self.setVerticalStretch(state=self._stretchEnabled) | |
def toggleAlternateBG(self): | |
if self.isAlternateBGEnabled: | |
self._alternateBGEnabled = False | |
else: | |
self._alternateBGEnabled = True | |
self.setAlternateBackground(state=self._alternateBGEnabled) | |
def setVerticalStretch(self, state=False): | |
self._stretchEnabled = state | |
if state: | |
self._innerLayout.addItem(self._stretch) | |
else: | |
stretch = self._innerLayout.itemAt(self._innerLayout.count() - 1) | |
if stretch is self._stretch: | |
self._innerLayout.removeItem(stretch) | |
def setAlternateBackground(self, state=False): | |
self._alternateBGEnabled = state | |
if state: | |
for i, widget in enumerate(self.getAllWidgets()): | |
i = i + 1 | |
if i % 2 == 0: | |
widget.setObjectName("alternateBG") | |
widget.setAttribute(QtCore.Qt.WA_StyledBackground) | |
self._enableBG() | |
else: | |
self._enableBG(style="#alternateBG{}") | |
def _enableBG(self, style=None): | |
if not style: | |
style = self._style | |
self.setStyleSheet(style) | |
def setLayoutMargin(self, margin=0): | |
self._innerLayout.setMargin(margin) | |
def setLayoutSpacing(self, spacing=0): | |
self._innerLayout.setSpacing(spacing) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment