- 浏览: 205981 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
悲梦天下:
楼主,有些视频到一半就没声音了,怎么破!!!
python视频教程 更新22(完) -
schi:
啊,我太傻了,都想到使用uv了,可以有更简单的方法,只要把uv ...
Get Reversed Normal Faces(获取反法线面) [原理] -
schi:
相对Pillow和PySide而言,显示图片opengl就显得 ...
display an image with pyopengl and Pillow -
schi:
我也是今天才偶然想到的,我以后可能用不着了,所有分享给有需要的 ...
Get Reversed Normal Faces(获取反法线面) [原理] -
baiyanbin:
支持楼主原创,关注楼主博客有一阵子了,国内认真认真搞技术的太少 ...
python视频教程 更新22(完)
maya2011使用了Qt框架,10年来几乎一成不变的maya界面,现今变成了黑糊糊的界面,虽然只是随便的玩弄了一下,感觉比以前的界面好多了。
Ok,感叹到此为止,进入我们今天的话题"Working with Qt",主要介绍如何使用Qt的Designer来给maya制作UI,有了Designer不管你是程序员还是非程序员,都能轻松给maya制作UI。
先给出Qt的下载地址,Maya 2011 使用的是 Qt 4.5,版本4.5.X的X是无关紧要的,如果你只是用来制作UI我认为版本应该不重要,但如果你是想要写基于Qt的maya插件,那版本就十分重要了。
Win
ftp://ftp.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe
Linux 请参考http://download.autodesk.com/us/maya/2011help/files/Setting_up_your_build_environment_Linux_environments_32bit_and_64bit.htm
Mac
ftp://ftp.qt.nokia.com/qt/source/qt-mac-cocoa-opensource-4.5.3.dmg
安装好Qt后就可以使用Designer了,在开始制作UI前我简单的给你们说一下maya是如何读取.ui文件的。虽然maya2011使用了Qt框架,但据我所知maya不是像Qt那样的读取.ui文件,而是通过loadUI命令来读取的,再通过MQtUtil类来进行(已识别的)maya的脚本和Qt的插件(widgets)的连接来完成的,简单的说就是通过loadUI命令读取.ui文件,将读取的内容给MQtUtil进行过滤,如果能识别就会转化成对应mel命令来实现UI。所以虽然你使用Designer制作的UI,实际用起来还是基于mel的UI。可见maya还是在力挺mel啊,都撑了10年了。
打开Designer,我们要开始制作UI了,选择"Dialog without Buttons",点击"Create"
给窗口一个独一无二的名称,如"QtDialog",就像你在用mel写UI时一样给窗口一个独一无二的名称是一个很安全的做法,这样你以后就能用mel后python来对其进行访问了,如果你像更改窗口的标题可以在"windowTitle"那里更改
加入我们需要的控件两个"Label",一个"Combo Box"和一个"Line Edit",在Widget Box中找到后直接拖到窗口中就行
双击"Label"就可以编辑它们的显示内容,因为我们不需要对其进行访问,所以不需要给它们一个独一无二的名称,你也可以编辑它们的字体等属性,但"Combo Box"和"Line Edit"就需要了,如图Object列是它们在maya里的名称,Class是控件的类型,我把"Combo Box"命名为"objTypeOM","OM"是optionMenu的缩写,这样命名是因为"Combo Box"就是optionMenu,可以推论"Line Edit"就是textField,所以我命名为"objNameTF"
右键"Combo Box"来编辑它的项目
并加入"Sphere","Cube","Cylinder","Cone","Plane"
现在我们来添加两个按钮,也许你会问为什么不在一开始就选择一个有按钮的UI来创建呢,原因很简单,Qt里默认的带按钮的窗口都是使用QDialogButtonBox插件(widgets),这是maya不能识别的,因为mel没有按钮组,只有按钮(button)命令,所以我们只能使用PushButton,双击就能更改显示名称
到这里我们的UI就完成了,接下来就是对相应的控件进行命令绑定,当objTypeOM(Combo Box)的项目发生变化时,我希望objNameTF(Line Edit)里的内容是objTypeOM所选的项目的名称,mel_changeType()就是用来完成这些的命令
而当objNameTF里的内容是objTypeOM中的项目名称时,按下回车后objTypeOM会把该项目设置为当前所选的项目,我们需要mel_changeName()
最后是Ok按钮的命令,在按下Ok按钮时我希望能根据objTypeOM所选的项目来创建相应的物体,物体的名称则是objNameTF里的内容,这就需要mel_btnCmd()
现在我们把这些方法和对应的控件进行绑定,选择objTypeOM在Property Editor里点击加号图标并选择"String"来添加动态属性
因为"Combo Box"就是optionMenu,所以我们只要加入optionMenu命令的标签maya就能识别,需要注意的是在标签前面是"-"的代表使用mel,是"+"的代表使用python,我为什么给上面的方法都加一个"mel"前缀,就是为了区分mel和python。我们需要的是"changeCommand"标签,所以我们要输入"-changeCommand"
然后在"-changeCommand"属性中加入"mel_changeType()"(包括双引号),来完成绑定
同样我们也给objNameTF添加"-changeCommand"属性,并将它和"mel_changeName()"绑定;而Ok按钮就添加"-command"属性并将它和"mel_btnCmd()"绑定;最后是Close按钮,也给它添加"-command"属性,并输入"deleteUI QtDialog",这样在点击Close时就会关闭窗口。
把UI保存为createDialog.ui(可以是其它名称),我们可以转到maya来了,因为我的本本无法使用maya2011,所以就无法截图了。在脚本编辑器(mel面板)中执行下面的脚本
这个窗口就会出现在你的面前,当然是黑色的UI,你可以选择不同的物体类型来查看效果,或是在物体名称栏中输入"Sphere","Cube","Cylinder","Cone","Plane"(不包括双引号),最后点击按钮,你都会看到相应的动作。
你还可以将这个窗口和maya的主窗口进行整合,这样可以使你的窗口像Attribute Editor和Channel Box一样可以随便移动到maya的主窗口的任何位置,你只需要使用这一行命令
要使用python命令,就是把控件的属性添加成"+"的就行,其它都是一样的,需要注意的是你不能给控件同时添加"-"和"+"的属性,因为这样做并不能同时使用mel和python反而会造成无法识别方法而发生错误。
最后附上python的方法并附上.ui文件
Ok,感叹到此为止,进入我们今天的话题"Working with Qt",主要介绍如何使用Qt的Designer来给maya制作UI,有了Designer不管你是程序员还是非程序员,都能轻松给maya制作UI。
先给出Qt的下载地址,Maya 2011 使用的是 Qt 4.5,版本4.5.X的X是无关紧要的,如果你只是用来制作UI我认为版本应该不重要,但如果你是想要写基于Qt的maya插件,那版本就十分重要了。
Win
ftp://ftp.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe
Linux 请参考http://download.autodesk.com/us/maya/2011help/files/Setting_up_your_build_environment_Linux_environments_32bit_and_64bit.htm
Mac
ftp://ftp.qt.nokia.com/qt/source/qt-mac-cocoa-opensource-4.5.3.dmg
安装好Qt后就可以使用Designer了,在开始制作UI前我简单的给你们说一下maya是如何读取.ui文件的。虽然maya2011使用了Qt框架,但据我所知maya不是像Qt那样的读取.ui文件,而是通过loadUI命令来读取的,再通过MQtUtil类来进行(已识别的)maya的脚本和Qt的插件(widgets)的连接来完成的,简单的说就是通过loadUI命令读取.ui文件,将读取的内容给MQtUtil进行过滤,如果能识别就会转化成对应mel命令来实现UI。所以虽然你使用Designer制作的UI,实际用起来还是基于mel的UI。可见maya还是在力挺mel啊,都撑了10年了。
打开Designer,我们要开始制作UI了,选择"Dialog without Buttons",点击"Create"
给窗口一个独一无二的名称,如"QtDialog",就像你在用mel写UI时一样给窗口一个独一无二的名称是一个很安全的做法,这样你以后就能用mel后python来对其进行访问了,如果你像更改窗口的标题可以在"windowTitle"那里更改
加入我们需要的控件两个"Label",一个"Combo Box"和一个"Line Edit",在Widget Box中找到后直接拖到窗口中就行
双击"Label"就可以编辑它们的显示内容,因为我们不需要对其进行访问,所以不需要给它们一个独一无二的名称,你也可以编辑它们的字体等属性,但"Combo Box"和"Line Edit"就需要了,如图Object列是它们在maya里的名称,Class是控件的类型,我把"Combo Box"命名为"objTypeOM","OM"是optionMenu的缩写,这样命名是因为"Combo Box"就是optionMenu,可以推论"Line Edit"就是textField,所以我命名为"objNameTF"
右键"Combo Box"来编辑它的项目
并加入"Sphere","Cube","Cylinder","Cone","Plane"
现在我们来添加两个按钮,也许你会问为什么不在一开始就选择一个有按钮的UI来创建呢,原因很简单,Qt里默认的带按钮的窗口都是使用QDialogButtonBox插件(widgets),这是maya不能识别的,因为mel没有按钮组,只有按钮(button)命令,所以我们只能使用PushButton,双击就能更改显示名称
到这里我们的UI就完成了,接下来就是对相应的控件进行命令绑定,当objTypeOM(Combo Box)的项目发生变化时,我希望objNameTF(Line Edit)里的内容是objTypeOM所选的项目的名称,mel_changeType()就是用来完成这些的命令
global proc mel_changeType() { string $objType = `optionMenu -q -v objTypeOM`; textField -e -tx $objType objNameTF; }
而当objNameTF里的内容是objTypeOM中的项目名称时,按下回车后objTypeOM会把该项目设置为当前所选的项目,我们需要mel_changeName()
global proc mel_changeName() { string $objTypes[] = {"Sphere","Cube","Cylinder","Cone","Plane"}; string $text = `textField -q -tx objNameTF`; for($i in $objTypes) { if ($text == $i) optionMenu -e -v $i objTypeOM; } }
最后是Ok按钮的命令,在按下Ok按钮时我希望能根据objTypeOM所选的项目来创建相应的物体,物体的名称则是objNameTF里的内容,这就需要mel_btnCmd()
global proc mel_btnCmd() { string $objType = `optionMenu -q -v objTypeOM`; string $objName = `textField -q -tx objNameTF`; switch($objType) { case "Sphere": polySphere -n $objName; break; case "Cube": polyCube -n $objName; break; case "Cylinder": polyCylinder -n $objName; break; case "Cone": polyCone -n $objName; break; case "Plane": polyPlane -n $objName; break; } }
现在我们把这些方法和对应的控件进行绑定,选择objTypeOM在Property Editor里点击加号图标并选择"String"来添加动态属性
因为"Combo Box"就是optionMenu,所以我们只要加入optionMenu命令的标签maya就能识别,需要注意的是在标签前面是"-"的代表使用mel,是"+"的代表使用python,我为什么给上面的方法都加一个"mel"前缀,就是为了区分mel和python。我们需要的是"changeCommand"标签,所以我们要输入"-changeCommand"
然后在"-changeCommand"属性中加入"mel_changeType()"(包括双引号),来完成绑定
同样我们也给objNameTF添加"-changeCommand"属性,并将它和"mel_changeName()"绑定;而Ok按钮就添加"-command"属性并将它和"mel_btnCmd()"绑定;最后是Close按钮,也给它添加"-command"属性,并输入"deleteUI QtDialog",这样在点击Close时就会关闭窗口。
把UI保存为createDialog.ui(可以是其它名称),我们可以转到maya来了,因为我的本本无法使用maya2011,所以就无法截图了。在脚本编辑器(mel面板)中执行下面的脚本
// 请根据你的createDialog.ui文件路径进行修改 // 如果使用的是win系统,请使用\\来代替\ string $dialog = `loadUI -uiFile "/home/schi/createDialog.ui"`; showWindow $dialog; // objTypeOM command global proc mel_changeType() { string $objType = `optionMenu -q -v objTypeOM`; textField -e -tx $objType objNameTF; } // objNameTF command global proc mel_changeName() { string $objTypes[] = {"Sphere","Cube","Cylinder","Cone","Plane"}; string $text = `textField -q -tx objNameTF`; for($i in $objTypes) { if ($text == $i) optionMenu -e -v $i objTypeOM; } } // Ok button command global proc mel_btnCmd() { string $objType = `optionMenu -q -v objTypeOM`; string $objName = `textField -q -tx objNameTF`; switch($objType) { case "Sphere": polySphere -n $objName; break; case "Cube": polyCube -n $objName; break; case "Cylinder": polyCylinder -n $objName; break; case "Cone": polyCone -n $objName; break; case "Plane": polyPlane -n $objName; break; } }
这个窗口就会出现在你的面前,当然是黑色的UI,你可以选择不同的物体类型来查看效果,或是在物体名称栏中输入"Sphere","Cube","Cylinder","Cone","Plane"(不包括双引号),最后点击按钮,你都会看到相应的动作。
你还可以将这个窗口和maya的主窗口进行整合,这样可以使你的窗口像Attribute Editor和Channel Box一样可以随便移动到maya的主窗口的任何位置,你只需要使用这一行命令
dockControl -content $dialog;
要使用python命令,就是把控件的属性添加成"+"的就行,其它都是一样的,需要注意的是你不能给控件同时添加"-"和"+"的属性,因为这样做并不能同时使用mel和python反而会造成无法识别方法而发生错误。
最后附上python的方法并附上.ui文件
# 请根据你的createDialog.ui文件路径进行修改 # 如果使用的是win系统,请使用\\来代替\ dialog = cmds.loadUI(uiFile='C:\\mack\\qt\\createDialog_py.ui') cmds.showWindow(dialog) # 如需要整合到maya主界面,可以使用该行 cmds.dockControl( area='left', content=dialog ) # objTypeOM command def py_changeType(): objType = cmds.optionMenu('objTypeOM_py',q=1,v=1) cmds.textField('objNameTF_py',e=1,tx=objType) # objNameTF command def py_changeName(): objTypes = ("Sphere","Cube","Cylinder","Cone","Plane") name = cmds.textField('objNameTF_py',q=1,tx=1) [cmds.optionMenu('objTypeOM_py',e=1,v=i) for i in objTypes if name == i] # Ok button command def py_btnCmd(): objType = cmds.optionMenu('objTypeOM_py',q=1,v=1) name = cmds.textField('objNameTF_py',q=1,tx=1) if objType == "Sphere": cmds.polySphere(n=name) elif objType == "Cube": cmds.polyCubee(n=name) elif objType == "Cylinder": cmds.polyCylinder(n=name) elif objType == "Cone": cmds.polyCone(n=name) elif objType == "Plane": cmds.polyPlane(n=name)
- createDialog.zip (788 Bytes)
- 下载次数: 5
- createDialog_py.zip (813 Bytes)
- 下载次数: 7
发表评论
-
uv重叠(uv overlap)
2014-06-28 22:28 5385两年多前我需要解决uv重叠的问题,当时觉得是一个挺有挑 ... -
dx11 Shaders for maya
2014-06-09 17:48 2178我准备花点时间来弄点d ... -
Maya plugin with OpenCL C++ example
2014-04-23 12:19 3207GPU, Python and Maya使用的是python和 ... -
display an image with pyopengl and Pillow
2014-04-09 17:05 2418使用opengl和Pillow来显示图片。 如果你以前使用过p ... -
cmdReporterHighlighter
2014-01-19 19:30 892A syntaxhighlighter I wrote ... -
那条线代表什么
2013-11-07 12:32 1262好几个月前我问了前同事一个问题:那条线代表什么? 同事在玩 ... -
Modern OpenGL with python (freeglut, glfw, PySide/PyQt)
2013-11-04 15:28 6557Base on this tutorial 基于这个教程 ht ... -
Add MEL syntax highlighting for expression editor[给表达式编辑器添加mel的高光显示]
2013-08-30 18:16 1961I don't use mel for years. But ... -
GPU, Python and Maya
2013-06-27 17:32 3154Here an example how to use pyop ... -
Qt5.1 And Modern OpenGL
2013-07-16 12:15 3966I been learning modern opengl f ... -
mentalray cause maya2012 crash on standalone mode
2013-03-28 20:27 1097如果你想使用maya2012和python来做些批处理,你就要 ... -
sierpinski triangle 2d maya plug-in(with python API 2.0)
2012-11-07 16:55 2347因为python API 2.0可用的类很少,OpenMaya ... -
sierpinski triangle 2d in maya(with python API 2.0)
2012-10-22 20:41 2038在国庆前我刚好完成手上的工作,有两三天的空闲,于是就去 ... -
mel,cmds,python API哪个更快?
2012-09-13 14:37 3965昨天偶然的跟同事谈论 ... -
Maya Python API 2.0 - MGlobal
2012-08-31 18:07 2318MGlobal是一个静态类,提供通用的API涵数. 包括获取m ... -
Get Reversed Normal Faces(获取反法线面)
2012-08-20 18:34 1765这不是一个教程,这是 ... -
我讨厌给UI起名字,也懒得起名字
2012-07-05 14:35 1370从我开始给Maya开发UI工具的时候起就觉得给窗口起名是件麻烦 ... -
算法(algorithm) 101
2012-07-02 23:01 1179在Maya中实现深度/广度优先搜索算法 Depth-First ... -
使用Visual C++ 2010 Express来开发Maya x64插件
2012-07-02 22:57 4993Visual C++ 2010 Express是微 ... -
(Get Maya Main Window for PyQt4/PySide)为PyQt4/PySide获取Maya的主窗口
2012-07-02 22:47 1819我们都知道Maya的主窗口保存在mel的全局变量$gMainW ...
相关推荐
Qt is a cross-platform application framework and widget toolkit for creating classic and embedded graphical user interfaces, and applications that run on various software and hardware platforms with ...
《Working with Ruby Threads》这本书深入探讨了Ruby语言中的线程机制,对于希望利用Ruby进行高效并发编程的开发者来说是一本不可多得的资源。 #### Ruby为什么值得关注? Ruby作为一种动态类型、解释型语言,在...
下面,我们将深入探讨《Working With Microsoft Dynamics CRM 2011》这一资料中的核心知识点。 ### 一、Microsoft Dynamics CRM 2011概述 Microsoft Dynamics CRM 2011是微软推出的一款全面的客户关系管理软件,它...
在IT行业中,Microsoft Dynamics CRM 2011是一款强大的客户关系...而“Working With Microsoft Dynamics CRM 2011.pdf”这份文档很可能是关于这个主题的详细指南,涵盖了上述知识的实践应用和案例分析,值得深入学习。
这个主题“Retrofit Love Working with APIs on Android”深入探讨了如何利用Retrofit来构建强大的网络功能。 Retrofit是由Square公司开发的一个类型安全的HTTP客户端,它允许开发者通过简单的接口定义来创建网络...
Working with Unicode Making Applications Translation-Aware Dynamic Language Switching Translating Applications Chapter 19. Look and Feel Customization Using Qt Style Sheets Subclassing ...
在“Working with XML”这个PPT中,我们可以期待深入学习XML的基础概念、结构以及它在ASP.NET中的应用。 XML的核心是其自描述性,这意味着每个元素和属性都有明确的含义。它的结构由开始标签 `和结束标签 `>` 包围...
Unix进程是Unix操作系统中的核心概念,它代表一个正在执行的程序。了解Unix进程的细节对于任何需要在Unix环境下工作的开发者或系统管理员来说至关重要。本知识点将详细介绍Unix进程的不同方面,包括进程的属性、资源...
Pro ADO.NET Data Services: Working with RESTful Data Paperback: 336 pages Publisher: Apress; 1 edition (December 2, 2008) Language: English ISBN-10: 143021614X ISBN-13: 978-1430216148 Format: PDF You...
在"西门子SCL编程语言指导手册S7-SCL - Working with S7-SCL"中,你将学习到以下关键知识点: 1. **SCL基本概念**:了解SCL的编程环境,包括源代码编辑器、编译器和调试工具的使用。 2. **数据类型与变量声明**:...
Working with Linux Quick Hacks for the Command Line 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
"Working With Ruby Threads"这本书全面深入地探讨了这个主题,提供了关于Ruby线程的详尽知识。 在Ruby中,线程允许程序同时执行多个任务,从而提高了效率。Ruby的线程模型基于两种主要实现:MRI(Matz's Ruby ...
Working Effectively With Legacy Code
odoo 教您自定义. odoo 教您自定义. odoo 教您自定义.
Python Data Science Handbook Essential Tools for Working with Data 英文epub