2013-05-27 21 views
1

嗯,我正在尝试在PyQt4和python中使用maya中的outliner,我的outliner与其他两个面板中的Qsplitter一样,看起来代码没问题,但是当我运行代码有时大纲出现,有时不出现Pyqt中的Maya Outliner不收取费用

这是我创建大纲代码:

self.outliner = QWidget() 
self.outliner.setObjectName("outliner") 
self.outLayout = QGridLayout() 
self.outLayout.setContentsMargins(0, 0, 0, 0) 
self.outLayout.setObjectName("outLayout") 
self.outliner.setLayout(self.outLayout) 

outL = cmds.outlinerPanel(mbv=False, p="outLayout") 

cmds.control(out, edit=True, visible=True, parent="outLayout") 

这就是我如何显示它:

self.splitter1 = QSplitter() 

self.splitter1.addWidget(self.list) 

self.splitter1.addWidget(self.outliner) 

我需要什么至 修改,使其工作,每次

编辑:

我升级我的代码,删除inecesaring线,但仍然无法正常工作,我需要

+0

你在面板之间大家参考使用绝对名称添加了Widget到我的布局。你确定你没有失败,因为有一个未被删除的'panelLayout'或'outLayout'可能导致问题? – theodox

+0

@theodox也许,我必须检查,但如果是这种情况,'deleteUI'应该删除它,不是吗? –

回答

0

好这是我做完:

,第一部分是相同的

self.outliner = QWidget() 
    self.outliner.setObjectName("outliner") 
    self.outLayout = QGridLayout() 
    self.outLayout.setContentsMargins(0, 0, 0, 0) 
    self.outLayout.setObjectName("outLayout") 
    self.outliner.setLayout(self.outLayout) 

然后我“翻译” PyQt的玛雅能够与任何额外的代码分配布局

panel = mui.MQtUtil.fullName(long(sip.unwrapinstance(self.outLayout))) 
    cmds.setParent(panel) 
    if cmds.modelPanel("outL", exists=True): 
     cmds.deleteUI("outL") 
    outL = cmds.outlinerPanel(mbv=False) 
    cmds.control(outL, edit=True, visible=True, p=panel) 
    ptr = mui.MQtUtil.findControl(outL) 

变换玛雅插件到一个QWidget

self.outPanel = sip.wrapinstance(long(ptr), QObject) 

最后

self.outLayout.addWidget(self.outPanel) 
0

切换回答格式的方法:

如果您不依赖硬编码名称,现行代码会更好:

self.outliner.setLayout(self.outLayout) 
#snip# 
# in ordinary maya/python usage you'd do this.... 
panelLayout = cmds.formLayout("panelLayout", parent=self.outLayout) 
# but in your original sample self.Outlayout is not a maya widget but a QT one 
# so it doesn't resolve down to a string... 
# the line below is the usual idiom 
outliner = cmds.outlinerPanel("out", mbv=False, p=panelLayout) 

这样,控件的真实名称将被使用,并且你不易遭受同名的流浪。删除流浪汉仍然是一种很好的做法 - 但是很难确定没有让代码变得非常麻烦。

此外,该行:

cmds.control(out, edit=True, visible=True, parent="panelLayout") 

看起来冗余 - 它是故意的吗?试图将大纲放在父母身上吗?因为p =关键字应该为你做父母。

潜伏者更新

由于OP指出,上述不会代码的工作 - 我已经更新了样品,以指示未来的读者的利益问题。

+0

我不确定你对硬编码名称的真正含义,但是我想你可以引用类似'panel = cmds的东西。formLayout(parent =“outLayout”)'因为我尝试使用'parent = self.outLayout',它给我一个错误,但即使改变它仍然有同样的问题。我使用的'控制'是因为我在互联网上找到一个叫ouliner的方式,但是如果我把它拿出来,看起来工作正常 –

+0

啊 - 我看到:outLayout是QGridLayout,而不是典型的maya.cmds对象:那些总是返回实际控制的字符串名称(这可能不是你要求的名字......这样做的全部原因)我的不好。不过你可能会发现这个链接很有用:http://tech-artists.org/forum/showthread.php?2845-PyQt-Widget-in-Maya-Mel-UI-problem – theodox

+0

它帮助了我很多,但他们正在做我想要的opossite,他们在PyQt中使用一个列表,并将其放入Maya UI中。但耶是几乎相同的 –