- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Maya 中的 python 新手,我正在尝试构建一个可以生成形状并对其进行转换的 UI。我认为问题在于 ObjectCreation 函数,但我不确定。到目前为止,我得到的是:
import maya.cmds as cmds
#check to see if window exists
if cmds.window("UserInterface", exists = True):
cmds.deleteUI("UserInterface")
#create actual window
UIwindow = cmds.window("UserInterface", title = "User Interface Test", w = 500, h = 700, mnb = False, mxb = False, sizeable = False)
mainLayout = cmds.columnLayout(w = 300, h =500)
def SceneClear(*args):
cmds.delete(all=True, c=True) #Deletes all objects in scene
cmds.button(label = "Reset", w = 300, command=SceneClear)
polygonSelectMenu = cmds.optionMenu(w = 250, label = "Polygon Selection:")
cmds.menuItem(label = " ")
cmds.menuItem(label = "Sphere")
cmds.menuItem(label = "Cube")
cmds.menuItem(label = "Cylinder")
cmds.menuItem(label = "Cone")
def ObjectCreation(*args):
if polygonSelectMenu.index == 2: #tried referring to index
ma.polySphere(name = "Sphere")
elif polygonSelectMenu == "Cube":
ma.polyCube(name = "Cube")
elif polygonSelectMenu == "Cylinder":
ma.polyCylinder(name = "Cylinder")
elif polygonSelectMenu == "Cone":
ma.polyCone(name = "Cone")
cmds.button(label = "Create", w = 200, command=ObjectCreation)
def DeleteButton(*args):
cmds.delete()
cmds.button(label = "Delete", w = 200, command=DeleteButton)#Deletes selected object
cmds.showWindow(UIwindow) #shows window
我所追求的是让用户从选项菜单中选择一个选项,然后按创建按钮生成该形状。我试图通过名称和索引来引用它,但我不知道我错过了什么。就像我说的,我是Python新手,所以当我尝试自己寻找答案时,我找不到任何东西,当我找到类似的东西时,我无法理解它。另外,由于某种原因,SceneClear 功能/重置按钮似乎不起作用,因此如果有答案,请告诉我。
最佳答案
polygonSelectMenu
包含 optionMenu
UI 元素的路径。就我而言,它是:UserInterface|columnLayout7|optionMenu4
。这只是一个字符串,而不是对 UI 元素的引用。
要访问它的当前值,您必须使用:
currentValue = cmds.optionMenu(polygonSelectMenu, query=True, value=True)
列出了所有 optionMenu 的标志 here (Maya 2014 commands doc) ,可查询的旁边有一个绿色的小Q。
<小时/>因此,这是您的 ObjectCreation(*args)
函数:
def ObjectCreation(*args):
currentValue = cmds.optionMenu(polygonSelectMenu, query=True, value=True)
if currentValue == "Sphere": #tried referring to index
cmds.polySphere(name = "Sphere")
elif currentValue == "Cube":
cmds.polyCube(name = "Cube")
elif currentValue == "Cylinder":
cmds.polyCylinder(name = "Cylinder")
elif currentValue == "Cone":
cmds.polyCone(name = "Cone")
<小时/>
避免在代码行之间声明函数(在您的例子中是 UI 创建代码),尝试将 UI 创建代码放入函数内并在脚本末尾调用此函数。
它是可读的,因为您现在只有很少的 UI 元素。但是一旦您开始拥有 20 个或更多按钮/标签/输入,它很快就会变得一团糟。
此外,我更喜欢为 UI 元素指定一个对象名称,就像您对窗口所做的那样 ("UserInterface"
)。给你一个具体的例子:cmds.optionMenu("UI_polygonOptionMenu", w = 250, label = "多边形选择:")
然后可以使用以下代码在代码中的任何位置访问此 optionMenu:cmds.optionMenu("UI_polygonOptionMenu", query=True, value=True)
如果需要,这里是完整修改的脚本:
import maya.cmds as cmds
def drawUI(): #Function that will draw the entire window
#check to see if window exists
if cmds.window("UI_MainWindow", exists = True):
cmds.deleteUI("UI_MainWindow")
#create actual window
cmds.window("UI_MainWindow", title = "User Interface Test", w = 500, h = 700, mnb = False, mxb = False, sizeable = False)
cmds.columnLayout("UI_MainLayout", w = 300, h =500)
cmds.button("UI_ResetButton", label = "Reset", w = 300, command=SceneClear)
cmds.optionMenu("UI_PolygonOptionMenu", w = 250, label = "Polygon Selection:")
cmds.menuItem(label = " ")
cmds.menuItem(label = "Sphere")
cmds.menuItem(label = "Cube")
cmds.menuItem(label = "Cylinder")
cmds.menuItem(label = "Cone")
cmds.button("UI_CreateButton", label = "Create", w = 200, command=ObjectCreation)
cmds.button("UI_DeleteButton", label = "Delete", w = 200, command=DeleteButton)#Deletes selected object
cmds.showWindow("UI_MainWindow") #shows window
def SceneClear(*args):
cmds.delete(all=True, c=True) #Deletes all objects in scene
def ObjectCreation(*args):
currentValue = cmds.optionMenu("UI_PolygonOptionMenu", query=True, value=True)
if currentValue == "Sphere":
cmds.polySphere(name = "Sphere")
elif currentValue == "Cube":
cmds.polyCube(name = "Cube")
elif currentValue == "Cylinder":
cmds.polyCylinder(name = "Cylinder")
elif currentValue == "Cone":
cmds.polyCone(name = "Cone")
def DeleteButton(*args):
cmds.delete()
drawUI() #Calling drawUI now at the end of the script
希望这对您有帮助。
关于python - 玛雅Python : OptionMenu Selection With Button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28833940/
我正在运行一个 maya python 脚本,该脚本贯穿整个场景并减少网格对象的多边形数量(如果它超过特定范围)。 这在小场景上运行良好,但当我在数千个网格对象上运行它时,我机器的内存使用量会越来越多
在使用 Maya 2017 设置 PyQt5 时遇到一些问题。我已经在我的 Mac 上成功安装了 PyQt5,我可以编写独立的应用程序,但是当我尝试使用(例如)在 Maya 脚本编辑器中导入 PyQt
我目前正在编写一个小脚本,该脚本可以在 Autodesk Maya 中自动创建类似起重机的装备,用户可以通过 UI 选择关节数量。 我的问题是如何获取用户的整数输入并将其用作“jointAmount”
在 Maya 中使用 python 如何创建不弯曲或不平滑的线性样条线?我尝试了几种不同的选择,但我不清楚如何做到这一点。 这是我尝试创建的脚本的第一步。我正在尝试创建类似于下图的东西。 import
如何取消选择除最后选择之外的所有对象? 当我使用 2 个对象时,没有问题,因为我所要做的就是切换列表 [0],这将是我选择的第一个对象(这就是我在下面工作的方式)。 import maya.cmds
我想查询一个关节的 sao,以便我可以将其分配给另一个关节。在本例中,我已设法通过 .jot 获取 LowArm 的 oj,并且我正在尝试使用 执行类似的操作>sao. mc.joint ('L_Ha
我只想获取当前打开文件的场景名称。不是路径或扩展名。 cmds.file(q=True, sn=True) 我不能使用上面的,因为它返回完整路径。 谢谢 最佳答案 os 模块包括用于此的实用程序:
我正在编写一个 GUI 和脚本,当在场景中选择特定对象时执行。我以前没有任何问题,但现在我... 当我选择我的对象时,我创建的 scriptJob 说要启动程序……此时,它没有。进一步研究它,我尝试测
我需要使用 API 更改 Maya 的时间工作单位。(参见Window->Settings/Preferences->Preferences->Settings->Working Units->Tim
想知道是否可以检索最后删除的对象的名称。 我查看了 listHistory,但这似乎列出了选定或命名对象的历史记录。我还研究了 undoHistory printqueue,它将撤消历史记录打印到脚本
在 Autodesk Maya 中,我根据用户想要创建的楼层数动态创建 UI(变量 numFloors 从 intField 获取)。对于每个楼层,我想制作一个按钮来更改相机的高度以查看楼层(这是针对
我正在尝试使用 Python 脚本在 Maya 中制作一个简单的“对齐工具”,这就是我的进展 import maya.cmds as cmds selected = cmds.ls(selection
我一直在关注This Tutorial在 Maya 插件中使用来自 QT 设计器的 .UI 文件。它指出,为了在 UI 加载到 Maya 后查询 QtextEdit 字段的值,我需要执行以下操作: S
我正在尝试对多条动画曲线进行缩放操作,每条曲线都使用其最低键作为轴心点。我认为它应该是一个嵌套的 for 循环结构,但未能使其正常工作。 缩放很简单,只是: mykeys = pm.keyframe(
我是一名优秀的程序员,十分优秀!