首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pyqt的Maya出口线不收费

在Pyqt的Maya出口线不收费
EN

Stack Overflow用户
提问于 2013-05-27 18:17:18
回答 2查看 862关注 0票数 1

嗯,我试图用Pyqt4和python在maya中使用一个外列,我的外列和另外两个面板在一个Qsplitter中,看起来代码没有问题,但是当我运行代码时,有时会出现,有时不会出现。

这是我创建输出程序的代码:

代码语言:javascript
复制
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")

我就是这样展示的:

代码语言:javascript
复制
self.splitter1 = QSplitter()

self.splitter1.addWidget(self.list)

self.splitter1.addWidget(self.outliner)

每次我需要修改什么才能让它起作用

编辑:

我升级了我的代码,删除了插入行,但仍然没有达到我所需要的工作方式

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-03 14:58:46

嗯,这就是我完成的工作:

第一部分是相同的

代码语言:javascript
复制
    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,以便能够用任何额外的代码分配布局。

代码语言:javascript
复制
    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

代码语言:javascript
复制
    self.outPanel = sip.wrapinstance(long(ptr), QObject)

最后将Widget添加到我的布局中

代码语言:javascript
复制
    self.outLayout.addWidget(self.outPanel)
票数 0
EN

Stack Overflow用户

发布于 2013-05-29 17:28:55

切换到答题格式:

如果不依赖硬编码名称,则当前代码会更好:

代码语言:javascript
复制
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)

这样,控件的实名就会被使用,您就不会那么容易受到同名的迷途者的攻击。删除错误代码仍然是一种很好的做法--但是如果不让代码变得非常麻烦,就很难确定。

此外,这条线:

代码语言:javascript
复制
cmds.control(out, edit=True, visible=True, parent="panelLayout")

看起来是多余的-是故意的吗?这是否是试图将大纲作为父级的遗留问题呢?因为p=关键字应该为你做父母。

Lurker更新

正如OP所指出的,上面的代码是不会工作的--我已经更新了示例,以指出问题所在,以利于将来的读者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16778552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档