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

如何在Maya Python中为textScrollList添加图标及图标网格?

在Maya Python脚本中给textScrollList添加图标及实现图标网格

嘿,刚好做过类似的需求,来给你一步步拆解:

一、给textScrollList的列表项添加单个图标

Maya的textScrollList组件本身支持为每个列表项绑定图标,核心是用append(或insert)方法时指定image参数,或者通过edit模式下的itemImage来修改已存在项的图标。

代码示例:

import maya.cmds as cmds
import os

# 先清理可能存在的窗口
if cmds.window("iconScrollWin", exists=True):
    cmds.deleteUI("iconScrollWin")

# 创建窗口
win = cmds.window("iconScrollWin", title="带图标的textScrollList", widthHeight=(300, 400))
cmds.columnLayout(adjustableColumn=True)

# 创建textScrollList
scroll_list = cmds.textScrollList(allowMultiSelection=False, width=280)

# 准备图标路径(这里用Maya内置图标,也可以替换成自定义图标路径)
# 获取Maya内置图标目录
icon_dir = cmds.internalVar(upd=True) + "icons/"
icon_paths = [
    os.path.join(icon_dir, "commandButton.xpm"),
    os.path.join(icon_dir, "renderButton.xpm"),
    os.path.join(icon_dir, "polyCube.xpm")
]

# 给列表项添加图标
for idx, (label, icon) in enumerate(zip(["命令按钮", "渲染按钮", "多边形立方体"], icon_paths)):
    cmds.textScrollList(scroll_list, edit=True, append=label, itemImage=(idx+1, icon))

cmds.showWindow(win)

关键说明:

  • itemImage参数的格式是(项的索引, 图标路径),注意Maya的列表项索引是从1开始的
  • 图标支持.xpm、.png等格式,自定义图标记得用绝对路径,避免路径问题
  • 如果要动态更新某个项的图标,用cmds.textScrollList(scroll_list, edit=True, itemImage=(item_index, new_icon_path))

二、给列表项实现图标网格布局

遗憾的是,textScrollList本身是垂直/水平的列表布局,没法直接实现网格。不过Maya提供了更适合做图标网格的组件——iconTextScrollList,它原生支持多列网格排列,完全能满足需求。

代码示例:

import maya.cmds as cmds
import os

# 清理旧窗口
if cmds.window("iconGridWin", exists=True):
    cmds.deleteUI("iconGridWin")

# 创建窗口
win = cmds.window("iconGridWin", title="图标网格列表", widthHeight=(400, 400))
cmds.columnLayout(adjustableColumn=True)

# 创建iconTextScrollList,设置为3列网格
grid_list = cmds.iconTextScrollList(
    numberOfColumns=3,
    columnWidth=100,
    imageAlignment="top",
    labelAlignment="bottom",
    allowMultiSelection=False,
    width=380
)

# 准备图标和标签
icon_dir = cmds.internalVar(upd=True) + "icons/"
items = [
    ("立方体", os.path.join(icon_dir, "polyCube.xpm")),
    ("球体", os.path.join(icon_dir, "polySphere.xpm")),
    ("圆柱体", os.path.join(icon_dir, "polyCylinder.xpm")),
    ("圆锥体", os.path.join(icon_dir, "polyCone.xpm")),
    ("平面", os.path.join(icon_dir, "polyPlane.xpm")),
    ("圆环", os.path.join(icon_dir, "polyTorus.xpm"))
]

# 添加网格项
for label, icon in items:
    cmds.iconTextScrollList(grid_list, edit=True, append=label, image=icon)

cmds.showWindow(win)

关键说明:

  • numberOfColumns用来指定网格的列数,Maya会自动按列排列项
  • columnWidth可以设置每列的宽度,保证网格整齐
  • imageAlignment和labelAlignment控制图标和文字的相对位置,适合调整布局美观度
  • 如果非要用textScrollList实现网格,需要自定义绘制逻辑(比如用drawCommand),但复杂度很高,不推荐

额外小贴士:

  • 图标尺寸尽量统一(比如24x24或32x32),避免拉伸变形
  • 可以用os.path.exists(icon_path)提前检查图标路径是否存在,避免显示空白
  • 内置图标可以通过Maya的图标浏览器(Window > General Editors > Icon Browser)查看和复制路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:58:50