- 浏览: 201510 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
悲梦天下:
楼主,有些视频到一半就没声音了,怎么破!!!
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 5226两年多前我需要解决uv重叠的问题,当时觉得是一个挺有挑 ... -
dx11 Shaders for maya
2014-06-09 17:48 2117我准备花点时间来弄点d ... -
Maya plugin with OpenCL C++ example
2014-04-23 12:19 3146GPU, Python and Maya使用的是python和 ... -
display an image with pyopengl and Pillow
2014-04-09 17:05 2344使用opengl和Pillow来显示图片。 如果你以前使用过p ... -
cmdReporterHighlighter
2014-01-19 19:30 841A syntaxhighlighter I wrote ... -
那条线代表什么
2013-11-07 12:32 1212好几个月前我问了前同事一个问题:那条线代表什么? 同事在玩 ... -
Modern OpenGL with python (freeglut, glfw, PySide/PyQt)
2013-11-04 15:28 6496Base on this tutorial 基于这个教程 ht ... -
Add MEL syntax highlighting for expression editor[给表达式编辑器添加mel的高光显示]
2013-08-30 18:16 1906I don't use mel for years. But ... -
GPU, Python and Maya
2013-06-27 17:32 3047Here an example how to use pyop ... -
Qt5.1 And Modern OpenGL
2013-07-16 12:15 3916I been learning modern opengl f ... -
mentalray cause maya2012 crash on standalone mode
2013-03-28 20:27 1032如果你想使用maya2012和python来做些批处理,你就要 ... -
sierpinski triangle 2d maya plug-in(with python API 2.0)
2012-11-07 16:55 2294因为python API 2.0可用的类很少,OpenMaya ... -
sierpinski triangle 2d in maya(with python API 2.0)
2012-10-22 20:41 1978在国庆前我刚好完成手上的工作,有两三天的空闲,于是就去 ... -
mel,cmds,python API哪个更快?
2012-09-13 14:37 3896昨天偶然的跟同事谈论 ... -
Maya Python API 2.0 - MGlobal
2012-08-31 18:07 2286MGlobal是一个静态类,提供通用的API涵数. 包括获取m ... -
Get Reversed Normal Faces(获取反法线面)
2012-08-20 18:34 1724这不是一个教程,这是 ... -
我讨厌给UI起名字,也懒得起名字
2012-07-05 14:35 1328从我开始给Maya开发UI工具的时候起就觉得给窗口起名是件麻烦 ... -
算法(algorithm) 101
2012-07-02 23:01 1133在Maya中实现深度/广度优先搜索算法 Depth-First ... -
使用Visual C++ 2010 Express来开发Maya x64插件
2012-07-02 22:57 4892Visual C++ 2010 Express是微 ... -
(Get Maya Main Window for PyQt4/PySide)为PyQt4/PySide获取Maya的主窗口
2012-07-02 22:47 1779我们都知道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 ...
Retrofit Love Working with APIs on Android Retrofit Love Working with APIs on Android
Working With Microsoft Dynamics CRM 2011
学习 Ruby Thread 开发技术,深度解析
Working With Microsoft Dynamics CRM 2011 Contents at a Glance Part I Overview and Configuration 1 Microsoft Dynamics CRM 2011 Overview 3 2 Setup and Common Tasks 33 3 Managing Security and Information...
A good article about working with XML on Android.
Python Data Science Handbook Essential Tools for Working with Data
For Microsoft dynamic crm develop
西门子SCL编程语言指导手册S7-SCL - Working with S7-SCL
Working With Ruby Threads(完整版),非常帮的ruby 多线程书籍
This book focuses on methods for working with crop models, and in particular on mathematical and statistical methods.
unix process very detail description
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...
Working with Linux Quick Hacks for the Command Line 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Team Geek: A Software Developer's Guide to Working Well with Others Brian W. Fitzpatrick (Author), Ben Collins-Sussman (Author) 4.8 out of 5 stars (17 customer reviews) Paperback: 194 pages Publisher...
Working Effectively With Legacy Code