【问题标题】:Class-calling function not working类调用功能不起作用
【发布时间】:2014-02-14 11:08:31
【问题描述】:

我正在尝试通过调出导入窗口来修改这段代码,然后跟随这段代码。

由于我还将使用当前的一段代码(不是我编写的),它的工作方式是当用户选择 3 个前缀之一 ['a','b','c' ],它将相应地更改 Maya 中项目的命名。

部分原编码(前缀窗口):

import maya.cmds as cmds
import maya.mel as mel
import pymel.core as pm
from PyQt4 import QtGui, QtCore
import sys, os

class createUI(QtGui.QFrame):
    def __init__(self, parent=None):
        QtGui.QFrame.__init__(self, parent)
        self.shot = SHOT
        self.initUI()
        self.connections()

class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.resize(400,100)
        self.move(300,300)
        self.setWindowTitle('Select the prefix of rexPass') 
        self.pubDock = createUI()
        vLayout = QtGui.QVBoxLayout()
        vLayout.addWidget(self.pubDock)
        self.setLayout(vLayout)
        self.createConnection()

    def createConnection(self):
        self.connect( self.pubDock.cancelButton, QtCore.SIGNAL( "clicked()" ), self.close )
        self.connect( self.pubDock.OKButton, QtCore.SIGNAL( "clicked()" ), self.close )

def setupRenderGlobals():
    cmds.setAttr ('StartRange.multiFrame', 1)
    cmds.setAttr ('EndRange.endFrame', 200)
    cmds.setAttr ('WidthRes.xres', 1920)
    cmds.setAttr ('HeightRes.yres', 1080)

def main():
    setupRenderGlobals()
    global app
    app=QtGui.qApp

    global form
    form = MainWindow()
    form.show()

目前我想添加一个函数,它调用一个选择窗口来导入一些东西,一旦选择完成,它就会调用上面的代码。

我遇到的问题是,当用户在导入窗口中点击导入按钮时,它会自动关闭,并且没有显示 perfix 窗口,或者我会显示 2 个窗口或仅显示前缀窗口而不是导入窗口

我的编码:

class Processing(): 
'In-house code to call out the import window and they will have the name of 'prItems_a01''
importItems = procureItems.api.importItem()
allItems = pm.ls(type="prItems")


if allItem < 2 :
    test = MainWindow()
else:
    print ('testing')

有什么建议吗?

【问题讨论】:

    标签: python class maya calling-convention


    【解决方案1】:

    问题出在这里:

    如果所有项目

    allItems = pm.ls(type="prItems")
    
    if allItem < 2 :
        test = MainWindow()
    

    pymel.core.ls 返回一个list,而2 是一个int。 Python 在这里可能无法达到您的预期。 From the docs:

    除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

    所以,"list" &gt; "int"


    您可能打算做的是检查allItemlen,如下所示:

    def processing():
        # ~~ your code ~~ #
        if len(allItem) < 2:
            test = MainWindow()
        else:
            print ('testing')
    

    【讨论】:

    • 嗨,mhlester,谢谢,我会试试看。顺便说一句,我的类是否被正确定义类处理()?我需要在括号内说明什么吗?
    • 实际上,您似乎打算将其设为def。我没有注意到。 class 肯定是错误的,但没有迹象表明它应该是一个。
    • 好吧,但我想我之前尝试过一次,将它作为def 而不是class,它似乎没有解释我的编码,它直接跳到@ 987654335@这是否意味着我必须更改def main()中的编码?
    • 您正在混合制表符和空格。只使用空格,看看是否能解决它。 Python 对某些代码块中的内容的解释与您的不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多