Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maya UI Python动态更改NumberOfCollums_Python_User Interface_Maya - Fatal编程技术网

Maya UI Python动态更改NumberOfCollums

Maya UI Python动态更改NumberOfCollums,python,user-interface,maya,Python,User Interface,Maya,我想在Maya窗口中更改(某种程度上是动态的)rowColumnLayout的NumberOfColumns。根据'slibthumbsizembobox'给定的值,我想更改列的计数 问题是:在脚本编辑器中运行我的2个函数时,一切都正常。我执行第一个命令-创建ScrollLayout。我执行第二个命令,并使用正确的列数创建rowColumnLayout 但是当我试着只通过第一个函数运行它时,意味着第二个函数在第一个函数的末尾被调用-它不再工作了?!我收到错误消息,NumberOfCollumns

我想在Maya窗口中更改(某种程度上是动态的)rowColumnLayout的NumberOfColumns。根据'slibthumbsizembobox'给定的值,我想更改列的计数

问题是:在脚本编辑器中运行我的2个函数时,一切都正常。我执行第一个命令-创建ScrollLayout。我执行第二个命令,并使用正确的列数创建rowColumnLayout

但是当我试着只通过第一个函数运行它时,意味着第二个函数在第一个函数的末尾被调用-它不再工作了?!我收到错误消息,NumberOfCollumns必须大于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")
提前谢谢


Daniel

如果给它零列,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_滑块
h_滑块
表单
是什么,因为它是在它们之后声明的,不需要做额外的工作来查找它们(你可以通过一个类得到一个更受控制的版本,同样的效果。你会注意到我根本不使用名称:名称是不可靠的,如果有一个旧的布局,使用变量会更简单


我还将行和列的最小值设置为1,这样就不会出现零除问题。

首先非常感谢您的回复!在我编写时,saw给了我一个数字,它实际上正在工作,但只有在我执行“COLLMN更新”时才能工作作为一个单独的功能,通过点击鼠标按钮。但我总是对新的想法感兴趣。至于你的脚本-是唯一的方法来更新使用滑块的collum计数吗?我想让它由窗口大小触发?!感谢Danielu我知道没有调整大小的事件-它可能在底层的QT小部件中,但默认的maya.cmds窗口不会告诉您何时调整大小。您可以使用一个大按钮内的dragCallback来执行此操作,但这将使maya gui超出其擅长的范围