Как исправить «итерацию по непоследовательности» в моем скрипте PySide (Maya) - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь сделать PySide Ui в Maya, глядя на разные примеры кодов, но мой не работает, Проблема в том, что я получаю

#Traceback (most recent call last):
#   File "maya console", line 69, in <module>
#   File "maya console", line 32, in create
#   File "maya console", line 61, in __init__
#   File "maya console", line 65, in set_items
# TypeError: iteration over non-sequence # 

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

from PySide2 import QtGui, QtCore, QtWidgets
from shiboken2 import wrapInstance

import maya.OpenMaya as om
import maya.OpenMayaUI as omui
import maya.cmds as cmds
import os, functools

def getMayaWindow():
    pointer = omui.MQtUtil.mainWindow()
    if pointer is not None:
        return wrapInstance(long(pointer), QtWidgets.QWidget)

class testUi():
    def __init__(self):
        self.window = 'vl_test'
        self.title = 'Test Remastered'
        self.size = (1000, 650)

    def create(self):
        if cmds.window(self.window, exists=True):
            cmds.deleteUI(self.window, window=True)

        self.parentWindow = getMayaWindow()
        self.mainWindow = QtWidgets.QMainWindow(self.parentWindow)
        self.mainWindow.setObjectName(self.window)
        self.mainWindow.setWindowTitle(self.title)

        self.mainWidget = QtWidgets.QWidget()
        self.mainWindow.setCentralWidget(self.mainWidget)
        self.mainLayout = QtWidgets.QFormLayout(self.mainWidget)
        testIk = test(self)
        self.mainLayout.addWidget(testIk)

        self.mainButton = QtWidgets.QPushButton()
        self.mainLayout.addWidget(self.mainButton)
        self.mainButton.clicked.connect(partial(self.load_selected))

        self.mainWindow.show()    



class test():
    def __init__(self, maya_transform_nodes=[]):
        qWid = QtWidgets.QWidget()
        self.setMinW = qWid.setMinimumWidth(300)
        self.setMinH = qWid.setMinimumHeight(300)
        self.sss = qWid.setStyleSheet("border:1px solid rgb(0, 255, 0);")
        self.items = []

        self.transform_move = QtGui.QTransform()
        self.transform_scale = QtGui.QTransform()

        self.prev_mouse_pos = QtCore.QPoint(0, 0)

        self.color = QtGui.QColor(0, 255, 50, 50)
        self.clicked_color = QtGui.QColor(0, 255, 50, 150)
        self.right_clicked_color = QtGui.QColor(255, 0, 0, 150)

        if maya_transform_nodes:
            self.set_items(maya_transform_nodes)


    def set_items(self, maya_transform_nodes):
        for path in maya_transform_nodes:
            print path

v = testUi()
v.create()

Ожидаемый результат будет - я получаю окно с кнопкой, которая не работает и маленький виджет, который я написал в test ().

1 Ответ

1 голос
/ 30 марта 2019

В testUi.create у вас есть:

testIk = test(self)

Но self это просто экземпляр класса testUi. Это класс, а не список. Но он передается как maya_transform_nodes в test, который ожидает список или другую итерацию. Так что либо передайте ему список (или другой итерируемый), либо удалите аргумент и оставьте по умолчанию значение [].

...