Files
Nexus/2023/scripts/animation_tools/dwpicker/stack.py
2025-11-23 23:31:18 +08:00

40 lines
1.2 KiB
Python

from .pyside import QtWidgets, QtCore
ORIENTATIONS = {
'horizontal': QtCore.Qt.Horizontal,
'vertical': QtCore.Qt.Vertical
}
def create_stack_splitters(data, widgets, orientation='vertical'):
"""
data: [[.25, [1.]], [.5, [.5, .5]], [.25, [.3, .5, .2]]]
widgets: List[QWidgets.QWidget]
"""
key = 'horizontal' if orientation == 'vertical' else 'vertical'
orientation_1 = ORIENTATIONS[key]
key = 'vertical' if orientation == 'vertical' else 'horizontal'
orientation_2 = ORIENTATIONS[key]
root_splitter = QtWidgets.QSplitter(orientation_1)
widget_it = iter(widgets)
for i, (column, rows) in enumerate(data):
splitter = QtWidgets.QSplitter(orientation_2)
root_splitter.addWidget(splitter)
root_splitter.setStretchFactor(i, int(column * 100))
for j, row in enumerate(rows):
widget = next(widget_it, QtWidgets.QWidget())
splitter.addWidget(widget)
splitter.setStretchFactor(j, int(row * 100))
root_splitter.setSizes([int(d[0] * 100) for d in data])
root_splitter.update()
return root_splitter
def count_panels(panels):
result = 0
for _, rows in panels:
result += len(rows)
return result