2014-02-14 2 views
0

Я пытаюсь изменить этот фрагмент кода, вызывая окно импорта, а затем следую этим кодом.Функция вызова класса не работает

Как я и собираюсь использовать текущий фрагмент кода (который не написан мной), способ, которым он работает, заключается в том, что когда пользователь выбирает один из трех префиксов ['a', 'b', 'c '], это изменит именование элементов в Maya соответственно.

Часть бывшего Coding (префикс окно):

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() 

В настоящее время я хотел бы добавить на функции, где она вызывает окно выбора импортировать что-то, и после того, как выбор сделан, он будет потом вызывается вышеуказанный код.

Проблема заключается в том, где, когда пользователь нажимает кнопку импорта в окне импорта, он автоматически закрывается, а окно перфекционизма не появляется, или у меня бы появилось 2 окна или только окно префикса, а не окно импорта

Мой Coding:

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') 

Любые советы?

ответ

0

Проблема здесь:

если allItem < 2: тест = MainWindow() еще: печать ('тестирование')

allItems = pm.ls(type="prItems") 

if allItem < 2 : 
    test = MainWindow() 

pymel.core.ls возвращает list, в то время как 2 является int. Python может не делать то, что вы ожидаете отсюда. From the docs

Объекты разных типов, кроме номеров, упорядочены по их названиям типов; объекты того же типа, которые не поддерживают надлежащее сравнение, упорядочиваются по их адресу.

Так, "list" > "int"


То, что вы, вероятно, имел в виду, чтобы сделать, это проверить len из allItem, как это:

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

Привет mhlester, спасибо, я попробую это. Кстати, мой класс правильно определяется классом Processing()? Должен ли я указать что-либо в скобках? – yan

+0

На самом деле, похоже, вы намеревались быть «def». Я не заметил. Это определенно неправильно как «класс», но нет никаких признаков того, что он должен быть одним. – mhlester

+0

Хорошо, но я думаю, что я попробовал это раньше, предоставив его как 'def' вместо' class', он, кажется, не интерпретирует мое кодирование, и он переходит прямо в 'def main()' Будет ли это означает, что мне нужно изменить кодировку в 'def main()'? – yan

Смежные вопросы