Source code for nukescripts.widgetgroup
from PySide6.QtCore import Qt
from PySide6.QtGui import QPalette, QPainter, QPainterPath
from PySide6.QtWidgets import (QStyleOptionButton,
QStyle,
QVBoxLayout,
QWidget,
QCheckBox,
QSizePolicy)
[docs]class GroupWidget(QWidget):
def __init__(self, text=""):
super().__init__()
# Master layout
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# Checkbox button, add it to master layout
self.button = GroupWidgetButton()
self.button.setText(text)
self.button.clicked.connect(self.toggleGroup)
self.layout.addWidget(self.button)
# Group contents container widget
self.groupContentWidget = QWidget()
# Group contents sub layout
self.groupContentLayout = QVBoxLayout()
self.groupContentWidget.setLayout(self.groupContentLayout)
# Add the group content to the master layout
self.layout.addWidget(self.groupContentWidget)
self.hide()
def addSubWidget(self, widget):
self.groupContentLayout.addWidget(widget)
def setText(self, text):
self.button.setText(text)
def toggleGroup(self):
if self.button.isChecked():
self.show()
else:
self.hide()
[docs]class GroupWidgetButton(QCheckBox):
def __init__(self):
super().__init__()
self.groupWidgets = []
self.setSizePolicy( QSizePolicy( QSizePolicy.Fixed, QSizePolicy.Fixed ) )
[docs] def paintEvent( self, event ):
style = self.style()
painter = QPainter(self)
opt = QStyleOptionButton()
self.initStyleOption(opt)
painter.setRenderHint(QPainter.Antialiasing)
palette = self.palette()
subopt = QStyleOptionButton(opt)
subopt.rect = style.subElementRect( QStyle.SE_CheckBoxIndicator, opt, self )
painter.setBrush( palette.color(QPalette.Text) if self.isEnabled() else palette.color( QPalette.Disabled, QPalette.Light ) )
painter.setPen( Qt.NoPen )
path = QPainterPath()
if self.isChecked():
path.moveTo( 4, 3 )
path.lineTo( 13, 3 )
path.lineTo( 8, 11 )
else:
path.moveTo( 4, 3 )
path.lineTo( 12, 7 )
path.lineTo( 4, 12 )
painter.drawPath( path )
subopt.rect = style.subElementRect( QStyle.SE_CheckBoxContents, opt, self )
style.drawControl( QStyle.CE_PushButtonLabel, subopt, painter, self )