嗯,我试图用Pyqt4和python在maya中使用一个外列,我的外列和另外两个面板在一个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)每次我需要修改什么才能让它起作用
编辑:
我升级了我的代码,删除了插入行,但仍然没有达到我所需要的工作方式
发布于 2013-06-03 14:58:46
嗯,这就是我完成的工作:
第一部分是相同的
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)发布于 2013-05-29 17:28:55
切换到答题格式:
如果不依赖硬编码名称,则当前代码会更好:
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=关键字应该为你做父母。
Lurker更新
正如OP所指出的,上面的代码是不会工作的--我已经更新了示例,以指出问题所在,以利于将来的读者。
https://stackoverflow.com/questions/16778552
复制相似问题