Pyqt的Maya Outliner不收费

时间:2013-05-27 18:17:18

标签: python pyqt4 maya outliner

我正在尝试在maya中使用Pyqt4和python中的一个大纲,我的大纲是在Qsplitter和其他两个小组中,看起来代码还可以,但是当我运行代码时有时会出现大纲,有时候不会不会出现

这是我创建大纲视图的代码:

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)

我需要修改以使其每次都能正常工作

修改

我升级了我的代码,删除了无用的行,但仍然无法按照我需要的方式工作

2 个答案:

答案 0 :(得分: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)
通过这种方式,将使用控件的真实名称,并且您不太容易受到具有相同名称的strays的影响。删除strays仍然是一种很好的做法 - 但是如果不使代码非常麻烦,很难确定。

另外,该行:

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

看起来多余 - 是故意的吗?是否尝试将轮廓设为父级?因为p =关键字应该为你做父母养育。

潜伏者更新

正如OP指出的那样,上面的代码不会起作用 - 我已经更新了样本,以便为未来读者的利益指出问题。

答案 1 :(得分: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“翻译”为maya,以便能够为任何额外代码分配布局

    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)

将Maya小部件转换为QWidget

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

最后将Widget添加到我的布局

    self.outLayout.addWidget(self.outPanel)