gpt4 book ai didi

python - 为什么使用此脚本在 Maya Python 中删除UI 不起作用?

转载 作者:行者123 更新时间:2023-11-30 22:48:56 30 4
gpt4 key购买 nike

我在使用 Maya Python 编写的脚本时遇到一些问题!我希望能够通过按下按钮来调用函数来关闭 UI。我在这里和其他网站上都查看过,但似乎无法使其工作。当我按下“关闭”按钮时没有任何反应。

def closeUI(*args):

if (cmds.window('mainWindow', exists=True)):
cmds.deleteUI('mainWindow')


def mainWindow(*args):

closeUI()

mainWindow = cmds.window( title="Auto-rig", widthHeight=(300, 300), s=False, vis=True, toolbox=True )
cmds.columnLayout( adjustableColumn=True )

cmds.button( label='Create Joints (1 of 3)', command=createJoints, en=True )

cmds.button( label='Create IK (2 of 3)', command=createIk, en=True )

cmds.button( label='Create Controls (3 of 3)', command=createControls, en=True )

cmds.button( label='Close', command=closeUI, en=True )

mainWindow()

最佳答案

使用 Maya gui 小部件的字符串引用时必须小心 - 不能保证您获得所需的名称。因此,即使您的代码尝试创建一个名为“X”的窗口,您也可能会得到一个名为“X1”的窗口,并且如果您对引用进行了硬编码,您将永远找不到“X1”

在这种情况下,正确的方法是在创建窗口时在变量中捕获窗口的名称,然后使用该保存的名称。您可以使用闭包非常优雅地完成此操作:Python 功能允许函数“捕获”声明时存在的变量的值。这是一个非常基本的示例,它使用闭包并忽略窗口 id:

import maya.cmds as cmds

def create_window():
window = cmds.window(title='Main Window')
column = cmds.columnLayout()
button = cmds.button("Delete me")

def close_handler(*_):
cmds.deleteUI(window) # 'window' is captured by the closure

cmds.button(button, e=True, command = close_handler)

cmds.showWindow(window)
return window

create_window()

如果你想记住主窗口的实际 id 是什么,只需存储“create_window”的结果即可。考虑到确保您始终知道硬编码 UI 项目的正确路径名所涉及的麻烦,它很少值得麻烦。

您可以而且应该扩展闭包的使用来处理 UI 的各个部分之间的其他类型的通信。大多数时候,与尝试使用硬编码字符串来管理所有内容相比,它更容易且更不易出现错误。

关于python - 为什么使用此脚本在 Maya Python 中删除UI 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39973403/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com