我在玛雅写了一件事,遇到麻烦了。真的不知道我做了什么,我要去做其他事情的时候,我做的最后一件事是在布局中添加一个按钮。 我已经在这方面乱搞了很长时间了,据我所知,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()
好的,问题解决了。 经过大量的故障排除,结果发现是我ui中的QSpacerItem导致窗口打开一次,然后第二次使maya崩溃。这让我觉得这和deleteUI有关。在
我添加了QSpacerItem,如下所示:
这使maya在删除UI/workspaceControl时完全崩溃… 不知道为什么,垃圾收集?在
这就解决了:
^{pr2}$好了,一切又如期进行了。干杯
相关问题 更多 >
编程相关推荐