删除workspaceControl/running uiScript,maya/pysid

2024-09-30 04:27:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玛雅写了一件事,遇到麻烦了。真的不知道我做了什么,我要去做其他事情的时候,我做的最后一件事是在布局中添加一个按钮。 我已经在这方面乱搞了很长时间了,据我所知,uiScript标志不喜欢方法调用中传递的参数…?发生的是,它从不将还原标志设置为True,这样比特就不会命中。从而在maya中生成多个窗口。我也在想cmds.deleteUItry子句应该去,不一定在发生之前我在哪里有它。如果有人能提供任何见解,我将非常感激,干杯

在下面的脚本中,我用一个按钮替换了ui实例,它在行为上没有任何区别。

代码:

/////////

from PySide2 import QtWidgets, QtCore
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
import maya.OpenMayaUI as mui
import maya.cmds as cmds
import weakref

if not 'customMixinWindow' in globals():
    customMixinWindow = None

class DockableWidget(MayaQWidgetDockableMixin, QtWidgets.QWidget):


    instances = list()
    CONTROL_NAME = 'customMixinWindow'

    def __init__(self, parent=None):

        super(DockableWidget, self).__init__(parent=parent)

        DockableWidget.delete_instances()
        self.__class__.instances.append(weakref.proxy(self))
        self.main_layout = QtWidgets.QVBoxLayout()
        self.button = QtWidgets.QPushButton()
        self.main_layout.addWidget(self.button)
        self.setLayout(self.main_layout)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

    @staticmethod
    def delete_instances():
        print "deleting"
        for ins in DockableWidget.instances:
            try:
                ins.setParent(None)
                ins.deleteLater()
            except:
                pass
                DockableWidget.instances.remove(ins)
            del ins


def DockableWidgetUIScript(restore=False):

    global customMixinWindow

    if restore == True:
        restoredControl = mui.MQtUtil.getCurrentParent()

    customMixinWindow = DockableWidget()
    if customMixinWindow is None:
        #customMixinWindow = DockableWidget()
        customMixinWindow.setObjectName('customMayaMixinWindow')

    if restore == True:
        mixinPtr = mui.MQtUtil.findControl(customMixinWindow.objectName())
        mui.MQtUtil.addWidgetToMayaLayout(long(mixinPtr), long(restoredControl))

    else:
        try:
            cmds.workspaceControl('customMayaMixinWindowWorkspaceControl', e=True, close=True)
            cmds.deleteUI('customMayaMixinWindowWorkspaceControl')
        except:
            pass
        customMixinWindow.show(dockable=True, restore=True, height=400, width=400, uiScript='import dockWin; dockWin.DockableWidgetUIScript(restore=True)')

def main():

    ui = DockableWidgetUIScript()
    return ui


if __name__ == 'dockWin':
    main()

Tags: instancesimportselfnonetrueifmainrestore
1条回答
网友
1楼 · 发布于 2024-09-30 04:27:15

好的,问题解决了。 经过大量的故障排除,结果发现是我ui中的QSpacerItem导致窗口打开一次,然后第二次使maya崩溃。这让我觉得这和deleteUI有关。在

我添加了QSpacerItem,如下所示:

self.spacerFive = QtWidgets.QSpacerItem(5 , 5)
self.myLayout.addSpacerItem(self.spacerFive)

这使maya在删除UI/workspaceControl时完全崩溃… 不知道为什么,垃圾收集?在

这就解决了:

^{pr2}$

好了,一切又如期进行了。干杯

相关问题 更多 >

    热门问题