如何在我的PySide(Maya)脚本中修复“迭代非序列”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在我的PySide(Maya)脚本中修复“迭代非序列”相关的知识,希望对你有一定的参考价值。
我试图让Maya中的PySide Ui查看代码的不同示例,但我的代码没有用,问题是我得到了
#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()中写的小部件。
答案
在testUi.create
你有:
testIk = test(self)
但self
只是testUi
的类实例。这是一个类,而不是列表。但它正在maya_transform_nodes
作为test
传递,它需要一个列表或其他可迭代的。因此要么传递一个列表(或其他可迭代的),要么删除参数并让它默认为[]
。
以上是关于如何在我的PySide(Maya)脚本中修复“迭代非序列”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PySide 在 Maya 中为通道框添加新按钮?
删除workspaceControl/running uiScript, maya/pyside
(pyQt/pySide)setStyleSheet(border....) 使 QPushButton 在 Maya 中不可点击