Python Maya UI在重新运行脚本后未停靠

Python Maya UI在重新运行脚本后未停靠,python,pyqt,maya,Python,Pyqt,Maya,我为Autodesk Maya 2015制作了一个UI窗口。每次我在Maya的脚本编辑器中运行脚本时,它工作正常,UI启动,并在Maya主窗口上正确停靠 但是,在关闭UI窗口并重新运行脚本后,该窗口不再停靠。它卡在主屏幕上,我必须关闭整个软件。在我第一次关闭主Maya窗口后,UI似乎再也找不到它了。我不知道如何解决这个问题。有谁能给我一些关于如何解决这个问题的建议吗 这是我的密码: def getMayaWindow(): ptr = apiUI.MQtUtil.mainWindow()

我为Autodesk Maya 2015制作了一个UI窗口。每次我在Maya的脚本编辑器中运行脚本时,它工作正常,UI启动,并在Maya主窗口上正确停靠

但是,在关闭UI窗口并重新运行脚本后,该窗口不再停靠。它卡在主屏幕上,我必须关闭整个软件。在我第一次关闭主Maya窗口后,UI似乎再也找不到它了。我不知道如何解决这个问题。有谁能给我一些关于如何解决这个问题的建议吗

这是我的密码:

def getMayaWindow():
    ptr = apiUI.MQtUtil.mainWindow()
    if ptr is not None:
        return shiboken.wrapInstance(long(ptr), QtGui.QMainWindow)

class pipeWindow(formClass,baseClass):
    def __init__(self, parent=getMayaWindow()):
        super(pipeWindow,self).__init__(parent) 

        self.setupUi(self)
        self.setObjectName('pipe_window')

        try:
            cmds.deleteUI('dockPane')
        except:
            pass                
        self.pane = cmds.paneLayout('dockPane', cn='single')

        if 'pipeDock' not in cmds.lsUI(ctl=1) :
            cmds.dockControl('pipeDock', con=self.pane, area='right', 
                              allowedArea = ['right','left'], label = 
                             "ANMD_Pipeline", w=365)            
        else:
            pass
        cmds.control( 'pipe_window', e=True, p=self.pane)

在尝试了多种方法之后,我成功地解决了这个问题。我用过

if cmds.dockControl('pipeDock', q=1, ex=1):
    cmds.deleteUI('pipeDock')

然后在
closeEvent
函数中有一个
super(className,self).closeEvent(event)
。这对我起了作用。这对我起了作用。以前我在
closeEvent
函数中使用了
cmds.deleteUI
,但该函数不起作用,我怀疑这是因为我没有关闭事件本身,所以每当我按下交叉按钮时,UI都会隐藏自己,而不是删除它。

查看formClass和基类的实现会很有用(我假设它们是PySide UI,对吧?)。多重继承可能很棘手(如果您不熟悉它,请看一看)。此外,我不清楚整个
pipeWindow
结构:您是PySide UI的父级(可能只是
formClass
)到主窗口,但是你通过一个<代码> PANELAYOUT > <代码> DOCKPRONE/<代码>:我不知道它是如何工作的,即使在第一次处理中。如果你对当前的解决方案不感兴趣,考虑使用<代码> MayaQWidgetDockableMixin <代码>;否则请进一步解释代码。