使用对Maya gui小部件的字符串引用时必须小心,不能保证获得所需的名称。因此,即使你的代码试图创建一个名为“X”的窗口,你可能会得到一个名为“X1”的窗口,如果你把引用硬编码了,你永远找不到“X1”
在这种情况下,正确的方法是在创建窗口时在变量中捕获窗口的名称,然后使用保存的名称。您可以非常优雅地使用闭包(closure)来实现这一点: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的各个部分之间的其他类型的通信。大多数时候,这比尝试用硬编码字符串来管理它更容易,也不容易出现bug。在