我想改变(一种动态)的NumberOfColumns的rowColumnLayout在玛雅窗口内。根据'SLiBThumbSizeComboBox'给出的值,我想改变列的计数。
这是问题:当运行我的2个函数在脚本编辑器内一切都工作良好。我执行第一个-创建了ScrollLayout。我执行第二个命令,并使用正确的列数创建rowColumnLayout。
但是当我尝试只通过第一个函数运行它时,意味着第二个函数在第一个函数的末尾被调用-它不再工作了吗?!我得到错误消息,numberofcolumns必须大于0 ?!
def FunctionA():
if cmds.scrollLayout('SLiBScrollLayout', query = True, exists = True):
cmds.deleteUI('SLiBScrollLayout', layout = True)
cmds.scrollLayout('SLiBScrollLayout', p="SLiB_thumbsframe")
def FunctionB():
iconLayout = cmds.optionMenu('SLiBThumbSizeComboBox', query = True, value = True)
iconSize = iconLayout.split('x')
iconDiv = int(iconSize[0])
n = int(cmds.scrollLayout("SLiBScrollLayout", query=True, saw=1)/iconDiv)
cmds.rowColumnLayout('Icons', numberOfColumns=n, p="SLiBScrollLayout")
Thanks in advance
丹尼尔如果你给它零列,我并不惊讶rowColumnlayout抱怨:你总是需要1。根据如何设置gui,您对saw
的查询可能返回0,这将解释您的问题。
这里有一个非常基本的例子,说明你想要做什么:
w = cmds.window()
c = cmds.columnLayout(adj=True)
v_slider = cmds.intSlider(min = 1, max =10, value=2)
h_slider = cmds.intSlider(min = 1, max =10, value=2)
scroll = cmds.scrollLayout()
form = cmds.formLayout()
def update_row(*_):
# get the row and column counts
rows = cmds.intSlider(v_slider, q=True, v= True)
columns = cmds.intSlider(h_slider, q=True, v= True)
# delete the old layout and rebuild.
# the 'or []` below lets you loop even if there are no children....
for n in cmds.formLayout(form, q=True, ca=True) or []:
cmds.deleteUI(n)
cmds.setParent(form)
# make a new rowColumn
new_row = cmds.rowColumnLayout(nc = columns)
for n in range(rows * columns):
cmds.button(label="button_%i" % n)
cmds.formLayout(form, e=True, af = [(new_row,'top',0), (new_row, 'bottom', 0 ), (new_row, 'left', 0 ), (new_row, 'right', 0)])
# both sliders call the update function
cmds.intSlider(h_slider, e=True, cc =update_row)
cmds.intSlider(v_slider, e=True, cc =update_row)
update_row() # do it once to get started
cmds.showWindow(w)
这里的关键是它声明的顺序:函数知道v_slider
, h_slider
和form
是什么,因为它是在它们之后声明的,不需要做额外的工作来找到它们(您可以通过类获得相同效果的更受控版本)。您会注意到我根本没有使用名称:如果周围有旧的布局,名称是不可靠的,使用变量会更简单。
我还将行和列的最小值设置为1,因此没有零除法问题。