删除workspaceControl/running uiScript, maya/pyside
Posted
技术标签:
【中文标题】删除workspaceControl/running uiScript, maya/pyside【英文标题】:deleting workspaceControl/running uiScript, maya/pyside 【发布时间】:2018-08-13 10:22:00 【问题描述】:我正在用 Maya 写东西,但遇到了麻烦。真的不知道我做了什么,发生这种情况时我打算处理其他事情,我做的最后一件事是在布局中添加一个按钮。 我已经搞砸了很长时间,据我所知,uiScript 标志不喜欢方法调用中传递的参数......?发生的情况是,它永远不会将恢复标志设置为 True,因此该位永远不会命中。导致它在maya中产生多个窗口。我还试图弄清楚 cmds.deleteUI 的 try 子句应该放在哪里,但在这发生之前我不确定我在哪里。如果有人能提供任何见解,我将不胜感激,欢呼/S
在下面的脚本中,我只用一个按钮替换了我的 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()
【问题讨论】:
【参考方案1】:好的,问题解决了。 经过大量故障排除后,结果是我的 ui 中的 QSpacerItem 导致窗口打开一次,然后第二次使 Maya 崩溃。这让我觉得它与 deleteUI 的东西有关。
我像这样添加了 QSpacerItem:
self.spacerFive = QtWidgets.QSpacerItem(5 , 5)
self.myLayout.addSpacerItem(self.spacerFive)
这使得 Maya 在删除 UI/workspaceControl 时完全崩溃…… 不知道为什么,垃圾回收?
这修复了它:
self.myLayout.addSpacerItem(QtWidgets.QSpacerItem(5, 5))
好的,一切都再次按预期工作。干杯/S
【讨论】:
以上是关于删除workspaceControl/running uiScript, maya/pyside的主要内容,如果未能解决你的问题,请参考以下文章
开发环境Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )