我正在尝试在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)
我需要修改以使其每次都能正常工作
修改
我升级了我的代码,删除了无用的行,但仍然无法按照我需要的方式工作
答案 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)