我有一个按钮,可以导入带有类的模块。类 (varClass) 创建一个窗口。
如果我再次单击该按钮,我会尝试以下操作:
if var:
var.toggleUI()
else :
var = varClass()
Run Code Online (Sandbox Code Playgroud)
但打开 Maya 后第一次创建窗口时 var 不存在。我怎样才能让它工作?
自从我开始用Python编写脚本以来,我就一直遇到这个问题。
尽管我将“宽度”和“高度”标志添加到主“窗口”命令中,但大小始终根据最近的操作进行调整。。明白我的意思了吗?
难道它不应该总是给我在宽度和高度标志后输入的相同大小吗?
问题是什么?
我不想使用相当大的标志,因为我总是需要在使用窗口时调整它们。
这种奇怪行为背后的真正原因可能是什么?
我想打开我的窗口,无论我通过拖动窗口的一角调整其大小多少次......
如果需要的话,这是我的Python代码......
import maya.cmds as cmds
def createGUI():
#If the window already exists, it will delete it.
if cmds.window('myWindow',exists=True):
cmds.deleteUI('myWindow')
#Creation window command
winControl=cmds.window('myWindow',title='BookShelf Generator',resizeToFitChildren=True, sizeable=False) #s=False does not allow the user to change the size of the window
#Windows Layout
#Top Part
#Header image
cmds.rowColumnLayout(w=400)
cmds.image( image='/home/s4915717/Stefano_Feltre_Scripting/artefacts/Images/UIheader02.png' )
cmds.setParent("..")
cmds.columnLayout(adjustableColumn=True,rowSpacing=0)
cmds.frameLayout( label='BookShelf Options',collapsable=False, mw=5, mh=5 )
cmds.text(label='Modify the value on the interace to create different aspect of the BookShelf.', align='center', height = 20) …Run Code Online (Sandbox Code Playgroud) 在 Maya 中,有一个 ls 命令可列出场景(或 DAG)中的所有对象。
pm.ls()
Run Code Online (Sandbox Code Playgroud)
这里是命令的参考ls。
我们可以通过传递参数来列出特定类型的元素type。
pm.ls(type="joint")
Run Code Online (Sandbox Code Playgroud)
一些可能的类型是camera、mesh、joint等。
我的问题是 ls() 命令可用的所有类型是什么?文档没有多大帮助。我在哪里可以找到它?
在 Maya 中,当我列出场景中的渲染层时,Maya 返回这些层,但并不总是按照它们在其旧版渲染层编辑器中显示的顺序。在更改现有渲染层的名称或添加和减去渲染层后,情况会如此。有没有办法列出图层并让 Maya 遵守渲染图层编辑器中使用的顺序?
导入 maya.cmds 作为 cmds cmds.ls(type = "renderLayer")
如果能够改变盔甲和衣服的RPG,它是如何完成的?我的意思是3D方面
如果我制作正常的角色,那就是平整的衣服,那就很简单,只需更换纹理,但问题是关于盔甲,它们有完全不同的模型.
那么只有重建的盔甲模型或装甲的角色模型?它是如何导入游戏引擎的,只有盔甲或带有新装甲的角色模型?
如果人在游戏中更换护甲,游戏会更换洞模型还是只更换护甲部分?
如果只有装甲部分,那么运动动画是如何完成的,是在3D程序中对角色进行动画制作的装甲模型或者......:D
我正在创建一个maya UI,但是当我在maya中运行一次replace_name按钮后尝试运行我的loadobject按钮命令时,我收到此错误:
cmds.textFieldButtonGrp(self.loadobject, e=True, text=select_objects[0])
RuntimeError:
Run Code Online (Sandbox Code Playgroud)
希望有人可以帮我解决这个问题.谢谢.
import maya.cmds as cmds
class MyUI:
def __init__(self):
self.title = "Test UI"
self.window = cmds.window(self.title, widthHeight=(1000, 600),
resizeToFitChildren=1)
cmds.rowLayout("button1, button2, button3", numberOfColumns=5)
cmds.columnLayout(adjustableColumn=True, columnAlign="center",
rowSpacing=10)
self.loadobject = cmds.textFieldButtonGrp(label="Load Object name",
buttonLabel="Load",
text="Select Object %s."
% "and Load name",
buttonCommand=self.load)
self.basename = cmds.textFieldButtonGrp(label="Basename",
buttonLabel="Rename",
text="Enter basename.",
buttonCommand=self.replace_name)
cmds.setParent(menu=True)
cmds.showWindow(self.window)
def load(self, *args):
select_objects = cmds.ls(selection=True)
cmds.textFieldButtonGrp(self.loadobject, e=True, text=select_objects[0])
def replace_name(self, *args):
self.loadobject = cmds.textFieldButtonGrp(self.loadobject,
q=True, text=True)
self.basename = cmds.textFieldButtonGrp(self.basename,
q=True, text=True)
name = cmds.rename(self.loadobject, …Run Code Online (Sandbox Code Playgroud) 首先,这似乎是一个学习更多编程的好地方.我编写了一个maya python脚本,其中两个函数都有效,但我无法通过UI按钮来调用superExtrude()函数.第一个函数执行几何网格操作,第二个函数应该为用户输入生成UI:
import maya.cmds as cmds
def superExtrude(extrScale, extrDist):
"""Loops through a list of selected meshes and extrudes all of the mesh faces to produce a polygon frame, based on existing mesh tesselations"""
myObjectLt = cmds.ls(selection=True)
for i in range(len(myObjectLt)):
numFaces = cmds.polyEvaluate(face=True)
item = myObjectLt[i] + ".f[:]"
cmds.select(clear=True)
cmds.select(item, replace=True)
#extrude by scale
cmds.polyExtrudeFacet(constructionHistory=True, keepFacesTogether=False, localScaleX=extrScale, localScaleY=extrScale, localScaleZ=extrScale)
selFaces = cmds.ls(selection=True)
cmds.delete(selFaces)
#extrude by height
cmds.select(item, replace=True)
cmds.polyExtrudeFacet(constructionHistory=True, keepFacesTogether=True, localTranslateZ=extrDist)
def extrWindow():
"""Creates the user interface UI for the …Run Code Online (Sandbox Code Playgroud) 我正在为Maya编写一个简单的工具,我尝试在另一个中调用基本函数.但我总是得到:global name "baseShape" is not defined.
以下是我的代码片段,其中包含错误:
class correctiveShaper():
def __init__(self):
#class variable
self.app = {}
#call on the build UI
self.buildUI()
def buildUI(self, *args):
cmds.separator(h=30)
cmds.button(label="Create Shape", w=295, h=30, al="right", c= baseShape)
def baseShape (self, *args) :
self.app["sel"]=cmds.ls(sl=True)[0]
Run Code Online (Sandbox Code Playgroud)
Python不会让我执行c = baseShape命令def buildUI,我不知道为什么.
我正在使用:Maya2014 + pyqt4.8 + python2.7
我正在做一个应用程序,它允许您加速和简化Maya中项目的选择.是一个选择器,用户可以将其附加到场景中的对象.在窗口中选择对象会导致场景中的对象分离.但相反我找不到怎么做.
如何捕获更改场景中对象选择并进一步处理其程序时发生的事件?
我是 pyqt 的新手(Maya 中的 pyside),请对我好一点:)
所以关键是我想通过循环语句生成许多按钮,类似于下面的东西:
(窗口中的 5 个按钮 - 完整代码 - 玛雅)
import PySide.QtCore as qc
import PySide.QtGui as qg
class simpleUI(qg.QDialog):
def __init__(self):
qg.QDialog.__init__(self)
self.setWindowTitle('Simple UI')
self.btn=[]
for x in range(5) :
self.btn.append(x)
self.btn[x]= qg.QPushButton(self)
self.btn[x].setText('this is btn number{0}'.format(x))
self.btn[x].setGeometry(qc.QRect(0,100+(x*20), 100,20))
self.btn[x].clicked.connect(lambda : self.notifyMe(x))
def notifyMe(self,index):
print index
dialog = simpleUI()
dialog.show()
Run Code Online (Sandbox Code Playgroud)
如您所见,我将按钮对象存储在数组中,但问题是当我想将 btn 信号与notifyMe 函数连接时,每个按钮总是给出 x 相同的值 (x=4),同时在button.setText x 成功给出唯一的增量值,我不明白为什么..
我正在写一个python脚本输出一个场景一个简单的,可读的文件。
我已经成功输出了位置,旋转,比例和网格名称,但是如何获取应用于网格的纹理的文件名?
import maya.cmds as cmds
meshesWithoutShape = []
meshes = cmds.ls("mesh_*")
for mesh in meshes:
if("Shape" not in mesh):
meshesWithoutShape.append(mesh)
shapesInSel = cmds.ls(dag=1,o=1,s=1)
shadingGrps = cmds.listConnections(shapesInSel,type='shadingEngine')
shaders = cmds.ls(cmds.listConnections(shadingGrps),materials=1)
fileNode = cmds.listConnections('%s.color' % (shaders[0]), type='file')
currentFile = cmds.getAttr("%s.fileTextureName" % fileNode[0])
for mesh in meshesWithoutShape:
print("\n" + mesh.rstrip('1234567890'))
print round(cmds.getAttr("%s.translateX" % mesh), 2), round(cmds.getAttr("%s.translateY" % mesh), 2), round(cmds.getAttr("%s.translateZ" % mesh), 2)
print cmds.getAttr("%s.rotateX" % mesh), cmds.getAttr("%s.rotateY" % mesh), cmds.getAttr("%s.rotateZ" % mesh)
print cmds.getAttr("%s.scaleX" % mesh), cmds.getAttr("%s.scaleY" % mesh), cmds.getAttr("%s.scaleZ" % …Run Code Online (Sandbox Code Playgroud) 我在 Maya / PySide2 / Python 2.7
我无法使用自定义表模型设置标题数据。
我试过这个:
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import Qt
class TableModel(QtCore.QAbstractTableModel):
def __init__(self, data):
super(TableModel, self).__init__()
self.setHeaderData(0, Qt.Horizontal, "Driver")
self.setHeaderData(1, Qt.Horizontal, "Range")
self.setHeaderData(2, Qt.Horizontal, "Driven")
self.setHeaderData(3, Qt.Horizontal, "Range")
self._data = data
def data(self, index, role):
if role == Qt.DisplayRole:
return self._data[index.row()][index.column()]
def rowCount(self, index):
return len(self._data)
def columnCount(self, index):
return 4
def addRow(self, row):
self._data.append(row)
self.layoutChanged.emit()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.table = QtWidgets.QTableView()
data = [
[
"firstData", …Run Code Online (Sandbox Code Playgroud) 我只是尝试了Maya 2017并看到他们已经过去了PySide2,这很棒,但我的所有工具都有import PySide或者from PySide import ...在其中.
显而易见的解决办法是查找/替换import PySide来import PySide2,希望一切后,目前仍然可以工作,但我还是希望能够支持老版本的玛雅.
我的想法是有一个单行解决方案来查找/替换,如:
import (PySide2 if "PySide2" in sys.modules else PySide)
Run Code Online (Sandbox Code Playgroud)
但这回归: Error: invalid syntax
有没有人有任何替代方案的想法?我想尝试将它保持在单行上,这样当我有条件时,它就很容易替代:
from PySide import QtCore, QtGui
Run Code Online (Sandbox Code Playgroud)
谢谢!