Skip to content

Instantly share code, notes, and snippets.

@sunilk-n
Last active January 6, 2020 13:40
Show Gist options
  • Save sunilk-n/08bdecb3d3f008155cdf7f32013f88b3 to your computer and use it in GitHub Desktop.
Save sunilk-n/08bdecb3d3f008155cdf7f32013f88b3 to your computer and use it in GitHub Desktop.
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