Class 找不到我指定的属性(PySide、Maya)
Class can't find attribute I am specifying(PySide, Maya)
我不时学习Python/PySide for Maya,今天我尝试用PySide 制作一个class。
我正在尝试制作一个 window,里面有一个空列表。我用 UI 的常用 Maya 命令完成了相同的代码结构并且它起作用了。
但是当我尝试对 PySide 执行相同操作时,出现 AttributeError: 'VL_Test' object has no attribute 'ui_fk'
错误。
我错过了什么?
Code:
import maya.cmds as cmds
import maya.OpenMayaUI as omui
try:
from PySide import QtCore, QtWidgets, QtGui
from shiboken import wrapInstance
except:
from PySide2 import QtCore, QtWidgets, QtGui
from shiboken2 import wrapInstance
def getMayaWindow():
pointer = omui.MQtUtil.mainWindow()
if pointer is not None:
return wrapInstance(long(pointer), QtWidgets.QWidget)
class VL_Test(object):
def showUI(cls):
win = cls()
win.create()
return win
def __init__(self):
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000,650)
self.supportsToolAction = False
self.actionName = 'Create and Close'
self.applyName = 'Create'
self.closeName = 'Close'
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)
QtWidgets.QStyleFactory.create('Windows')
self.mainLayout = QtWidgets.QHBoxLayout(self.mainWidget)
self.ui_fk()
self.mainWindow.show()
def ui_fk(self):
self.fkStrandGroupBox = QtWidgets.QGroupBox('FK Joints:')
self.fkStrandLayout = QtWidgets.QHBoxLayout()
self.mainLayout.addWidget(fkStrandGroupBox)
self.fkStrandGroupBox.setLayout(fkStrandLayout)
self.fkListWidget = QtWidgets.QListWidget()
self.fkStrandLayout.addWidget(fkListWidget)
testWindow = VL_Test()
testWindow.create()
我想你只是在这些变量之前失去了一些 self
fkStrandGroupBox
fkStrandLayout
fkListWidget
我在Maya 2017里运行,好像还可以
import maya.cmds as cmds
import maya.OpenMayaUI as omui
try:
from PySide import QtCore, QtWidgets, QtGui
from shiboken import wrapInstance
except:
from PySide2 import QtCore, QtWidgets, QtGui
from shiboken2 import wrapInstance
def getMayaWindow():
pointer = omui.MQtUtil.mainWindow()
if pointer is not None:
return wrapInstance(long(pointer), QtWidgets.QWidget)
class VL_Test(object):
def showUI(cls):
win = cls()
win.create()
return win
def __init__(self):
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000,650)
self.supportsToolAction = False
self.actionName = 'Create and Close'
self.applyName = 'Create'
self.closeName = 'Close'
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)
QtWidgets.QStyleFactory.create('Windows')
self.mainLayout = QtWidgets.QHBoxLayout(self.mainWidget)
self.ui_fk()
self.mainWindow.show()
def ui_fk(self):
self.fkStrandGroupBox = QtWidgets.QGroupBox('FK Joints:')
self.fkStrandLayout = QtWidgets.QHBoxLayout()
self.mainLayout.addWidget(self.fkStrandGroupBox)
self.fkStrandGroupBox.setLayout(self.fkStrandLayout)
self.fkListWidget = QtWidgets.QListWidget()
self.fkStrandLayout.addWidget(self.fkListWidget)
# test
self.fkListWidget.addItems(['a', 'b', 'c'])
testWindow = VL_Test()
testWindow.create()
而且,如果你使用PySide
,不要添加QtWidgets
,因为PySide没有QtWidgets
我比较喜欢用import *
,因为我比较懒
try:
from PySide.QtGui import *
from PySide.QtCore import *
from shiboken import wrapInstance
except:
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtUiTools import *
from shiboken2 import wrapInstance
如果考虑兼容性的话,可以试试这个。
https://github.com/mottosso/Qt.py
我不时学习Python/PySide for Maya,今天我尝试用PySide 制作一个class。
我正在尝试制作一个 window,里面有一个空列表。我用 UI 的常用 Maya 命令完成了相同的代码结构并且它起作用了。
但是当我尝试对 PySide 执行相同操作时,出现 AttributeError: 'VL_Test' object has no attribute 'ui_fk'
错误。
我错过了什么?
Code:
import maya.cmds as cmds
import maya.OpenMayaUI as omui
try:
from PySide import QtCore, QtWidgets, QtGui
from shiboken import wrapInstance
except:
from PySide2 import QtCore, QtWidgets, QtGui
from shiboken2 import wrapInstance
def getMayaWindow():
pointer = omui.MQtUtil.mainWindow()
if pointer is not None:
return wrapInstance(long(pointer), QtWidgets.QWidget)
class VL_Test(object):
def showUI(cls):
win = cls()
win.create()
return win
def __init__(self):
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000,650)
self.supportsToolAction = False
self.actionName = 'Create and Close'
self.applyName = 'Create'
self.closeName = 'Close'
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)
QtWidgets.QStyleFactory.create('Windows')
self.mainLayout = QtWidgets.QHBoxLayout(self.mainWidget)
self.ui_fk()
self.mainWindow.show()
def ui_fk(self):
self.fkStrandGroupBox = QtWidgets.QGroupBox('FK Joints:')
self.fkStrandLayout = QtWidgets.QHBoxLayout()
self.mainLayout.addWidget(fkStrandGroupBox)
self.fkStrandGroupBox.setLayout(fkStrandLayout)
self.fkListWidget = QtWidgets.QListWidget()
self.fkStrandLayout.addWidget(fkListWidget)
testWindow = VL_Test()
testWindow.create()
我想你只是在这些变量之前失去了一些 self
fkStrandGroupBox
fkStrandLayout
fkListWidget
我在Maya 2017里运行,好像还可以
import maya.cmds as cmds
import maya.OpenMayaUI as omui
try:
from PySide import QtCore, QtWidgets, QtGui
from shiboken import wrapInstance
except:
from PySide2 import QtCore, QtWidgets, QtGui
from shiboken2 import wrapInstance
def getMayaWindow():
pointer = omui.MQtUtil.mainWindow()
if pointer is not None:
return wrapInstance(long(pointer), QtWidgets.QWidget)
class VL_Test(object):
def showUI(cls):
win = cls()
win.create()
return win
def __init__(self):
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000,650)
self.supportsToolAction = False
self.actionName = 'Create and Close'
self.applyName = 'Create'
self.closeName = 'Close'
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)
QtWidgets.QStyleFactory.create('Windows')
self.mainLayout = QtWidgets.QHBoxLayout(self.mainWidget)
self.ui_fk()
self.mainWindow.show()
def ui_fk(self):
self.fkStrandGroupBox = QtWidgets.QGroupBox('FK Joints:')
self.fkStrandLayout = QtWidgets.QHBoxLayout()
self.mainLayout.addWidget(self.fkStrandGroupBox)
self.fkStrandGroupBox.setLayout(self.fkStrandLayout)
self.fkListWidget = QtWidgets.QListWidget()
self.fkStrandLayout.addWidget(self.fkListWidget)
# test
self.fkListWidget.addItems(['a', 'b', 'c'])
testWindow = VL_Test()
testWindow.create()
而且,如果你使用PySide
,不要添加QtWidgets
,因为PySide没有QtWidgets
我比较喜欢用import *
,因为我比较懒
try:
from PySide.QtGui import *
from PySide.QtCore import *
from shiboken import wrapInstance
except:
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtUiTools import *
from shiboken2 import wrapInstance
如果考虑兼容性的话,可以试试这个。 https://github.com/mottosso/Qt.py