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

Maya Python脚本问题:点击Test Script按钮后窗口自动关闭

问题解决:Maya脚本点击按钮后窗口关闭的修复

问题根源

你的脚本里,每次点击「Test Script」按钮时,testScript函数会重新加载demoScript模块。而模块的顶层代码(所有函数外部的部分)包含了删除旧窗口、创建新窗口的逻辑,模块被reload时会从头执行所有顶层代码,导致原来的窗口被删除,但新窗口没有被调用显示,所以看起来窗口莫名关闭了。

修复方案

把窗口的创建逻辑移到gui()函数内部,让窗口的检查、创建只在调用gui()时执行,而不是模块加载/reload时自动触发。同时优化按钮回调里的代码,避免不必要的重复导入操作。

修改后的完整脚本

'''
import demoScript
import imp
imp.reload (demoScript)
demoScript.gui()
'''
import re
import maya.cmds as cmds
import maya.mel as mel
import maya.api.OpenMaya as om
import math

def gui(*args):
    # 将窗口检查、创建逻辑移到这里,仅在调用gui()时执行
    if cmds.window("demoScriptWindow", exists=True):
        cmds.deleteUI("demoScriptWindow", window=True)
    
    myWindow = cmds.window("demoScriptWindow", t='DS Script Tester', rtf=1, w=100, h=100, toolbox=True)
    cmds.columnLayout(adjustableColumn=True)
    cmds.button(label= "Test Script", c=testScript)
    cmds.showWindow(myWindow)
    
def testScript(*args):
    # 无需在回调里重复导入并reload模块,直接调用函数即可
    demoScript('lf1','arm','Ik')
    
def demoScript(side, limb, typ):
    ctrlN = "%s_%s%s_CTRL" % (side, limb, typ)
    print(ctrlN)

额外优化建议

如果确实需要在按钮点击时reload模块(比如你正在修改demoScript函数的逻辑,想实时生效),可以把业务逻辑和UI逻辑分离:单独写一个业务逻辑模块,在按钮回调里只reload业务模块,这样就不会影响UI窗口的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:05:23