You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maya Python:下拉菜单与按钮对齐问题求助

Maya Python UI 对齐问题解决

我刚接触Maya Python开发,想让下拉菜单和两个按钮相互对齐,目前的UI里元素对齐混乱,原代码如下:

def win(myWin):
    if cmds.window(myWin, exists = True):
        cmds.deleteUI(myWin)
    myWin = cmds.window(myWin, rtf = True, width=250, height=180)
    cmds.columnLayout()
    cmds.text(label = 'Create Controllers and Change Colours', font = 'boldLabelFont')
    
    # Controllers
    cmds.separator(height = 20)
    ctrSelectMenu = cmds.optionMenu(label = 'Controller Type')
    cmds.menuItem(label = 'Circle X')
    cmds.menuItem(label = 'Circle Y')
    cmds.menuItem(label = 'Circle Z')
    cmds.menuItem(label = 'Cube'))  # 语法错误:多了一个右括号
    cmds.separator(style = 'none', height = 5)
    cmds.button(label = 'Create', c = lambda x:createControls(ctrSelectMenu), width = 100, align = 'centre')
    
    # Colours
    cmds.separator(style = 'none', height = 20)
    clrSelectMenu = cmds.optionMenu(label = 'Controller Colour')
    
    cmds.menuItem(label = 'Black')
    cmds.menuItem(label = 'Grey')
    cmds.menuItem(label = 'Light Grey')
    cmds.menuItem(label = 'White')
    
    cmds.menuItem(label = 'Maroon')
    cmds.menuItem(label = 'Red')
    cmds.menuItem(label = 'Rust Red')
    
    cmds.menuItem(label = 'Dark Blue')
    cmds.menuItem(label = 'Indigo')
    cmds.menuItem(label = 'Blue')
    cmds.menuItem(label = 'Navy Blue')
    cmds.menuItem(label = 'Sky Blue')
    
    #cmds.separator(style = 'none', height = 5)
    cmds.button(label = 'Apply', c = lambda x:controllerColour(clrSelectMenu),width = 250, align = 'right')
    
    cmds.showWindow(myWin)
    cmds.window(myWin, e=True, width=250, height=180)
    
win('Create Controllers')

问题分析

  1. 未统一columnLayout下元素的宽度与对齐规则,导致下拉菜单和按钮宽度错位
  2. 代码存在语法错误:cmds.menuItem(label = 'Cube'))多了一个右括号,运行会直接报错
  3. 按钮的align参数与布局逻辑不匹配,宽度设置也和下拉菜单不一致

修改后的代码

def win(myWin):
    if cmds.window(myWin, exists=True):
        cmds.deleteUI(myWin)
    myWin = cmds.window(myWin, rtf=True, width=250, height=180)
    # 设置列布局的统一宽度与对齐方式
    cmds.columnLayout(align='left', columnWidth=250)
    cmds.text(label='Create Controllers and Change Colours', font='boldLabelFont')
    
    # Controllers
    cmds.separator(height=20)
    # 给下拉菜单设置固定宽度,与按钮统一
    ctrSelectMenu = cmds.optionMenu(label='Controller Type', width=250)
    cmds.menuItem(label='Circle X')
    cmds.menuItem(label='Circle Y')
    cmds.menuItem(label='Circle Z')
    cmds.menuItem(label='Cube')  # 修复语法错误
    cmds.separator(style='none', height=5)
    # 按钮宽度与下拉菜单统一,对齐方式保持一致
    cmds.button(label='Create', c=lambda x:createControls(ctrSelectMenu), width=250, align='centre')
    
    # Colours
    cmds.separator(style='none', height=20)
    clrSelectMenu = cmds.optionMenu(label='Controller Colour', width=250)
    
    cmds.menuItem(label='Black')
    cmds.menuItem(label='Grey')
    cmds.menuItem(label='Light Grey')
    cmds.menuItem(label='White')
    
    cmds.menuItem(label='Maroon')
    cmds.menuItem(label='Red')
    cmds.menuItem(label='Rust Red')
    
    cmds.menuItem(label='Dark Blue')
    cmds.menuItem(label='Indigo')
    cmds.menuItem(label='Blue')
    cmds.menuItem(label='Navy Blue')
    cmds.menuItem(label='Sky Blue')
    
    cmds.separator(style='none', height=5)
    cmds.button(label='Apply', c=lambda x:controllerColour(clrSelectMenu), width=250, align='centre')
    
    cmds.showWindow(myWin)
    cmds.window(myWin, e=True, width=250, height=180)
    
win('Create Controllers')

关键修改点

  • 给columnLayout添加columnWidth=250,强制所有元素遵循统一列宽,保证对齐基础
  • 给两个下拉菜单设置width=250,与按钮宽度完全匹配
  • 修复了下拉菜单的语法错误,保证代码可正常运行
  • 统一按钮的对齐方式为centre(也可根据需求改为left),与下拉菜单视觉对齐
  • 恢复"Apply"按钮上方的分隔符,保持UI间距一致

内容的提问来源于stack exchange,提问作者Anjani Sathe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:44:54