找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

Python-----Houdini的GUI图形库之PySide

admin 2019-2-10 08:32 928人围观 Qt相关

作者:Houdini的一千个技巧

我用什么留住你,我给你贫穷的街道,绝望的日落,破败郊区的月亮。我给你一个久久的望着孤月的人的悲凉

博尔赫斯


查看houdini的python版本



在houdini环境文件中写入python版本



下载安装对应版本的pyside



安装pyside,然后找到pyside文件夹,复制



创建一个文件夹,拷贝pyside文件夹到这里



查找homeHoudiniDirectory目录,查看houdini模块的安装路径



你可以导入自己定义的py文件(模块)到这个目录



比如,导入shaderman模块



结果



比如,在pythonlibs中创建一个message模块



这个模块的唯一功能是显示一句话



然后再houdini的script文件夹创建一个123文件,每次你运行houdini,这个文件都会运行



123.py内,将pythonlibs文件夹(pyside所在的文件夹)append到系统路径



然后再houdini的python shell中就能导入这个message模块了



reload(message)函数也可以导入



查看pyside的版本



使用charm创建打开message模块



再创建一个pytest



然后再houdini的python shell中reload这个模块



自定义工具架,调用这个模块



结果



houdini用pyqt写的GUI案例



将案例的代码复制到shell,然后将from PyQt修改成from PySide



保存为pyside_houdini.py,保存到pythonlibs文件夹



创建一个pysidelabel.py模块,导入上面创建的pyside_houdini.py,然后实现一个功能,打印一句“hello world again”



新建工具,导入pysidelabel模块



结果



角色控制,创建CharPickerTutorial.py文件,复制上面的代码到这个py文件中



新的工具,导入CharPickerTutorial模块



创建一个button,用QPushButton函数,将按钮返回到select_btn



结果



归类图片



自定义selecthead函数,将按钮select_btn和这个selecthead函数进行关联,当按下按钮的时候打印出来/obj/toonsimple1这个节点



点击一下,就进行打印



那么,如何点击按钮的时候,选择绑定文件的呢?我们看一下toonsimple这个节点内部



绑定文件的控制器是由null节点,我们要选择这个null节点



首先我们将一个子节点ctrl_head选中



结果,点击一下按钮,打印一次ctrl_head



然后用setSlected函数,将该节点选中,结果,点击一下按钮,就只选中了ctrl_head控制器



导入图片,显示图片用QPixmap函数和setPixmap函数



结果



将界面置顶



打开qt designer,设置3个label,每个label设置几个按钮,然后为每个label添加背景图



创建一个基本的界面,保存为ui文件



路径



导入ui文件



显示出来



点击工具架,出现了2个界面



不需要先show,QDialog的显示有两个函数show()和exec()



结果



加载背景图



导入另外3个图,分别设置为character face hand的背景图



头部的buttom按钮名字叫ctrl_head



获取这个按钮



链接起来



点击按钮,选中头部



另外三个按钮,关联到selectctrl



定义一个char



selectctrl



选中了,这样点击右边的按钮,就选中了左边的null约束节点



buttom



funcbuttons



关联



测试



定义funcButtons,如果传入的是channel editor,那么就打开channel editor面板,先查看curdesktop()



可以看到当前的desktop是varomix_01



然后在当前的desktop上,创建createfloatingpanel()浮动的面板,面板的类型是channeleditor



houdini中打开channel editor面板的表达式如下,Qt中sender()函数,你在一个槽里面,调用这个函数,返回的就是你信号来源的对象



点击channel editor就打开channel editor



设置ui



下面定义select all按钮,当点击select all按钮,就选中所有子节点,如果传入的sendBtn是select all,那么,选中char的所有子节点,因为只有控制节点是绿色的,所以,如果节点的颜色是绿色,就选中该节点,即选中了所有的控制节点



选中所有



下面定义key all和zero all按钮,首先获取参数面板



定义getkeyableparms()函数,获取spin参数面板的参数



打印出来



完善,用description()函数,将spline,arms,legs标签下,内容标签为“eyes lookat custom space”等参数,放到keyableparms列表里



然后自定义zreoall函数,如果参数在keyableparms列表里,那么将这个参数的值设为0,hou.node(‘/obj/toonchar1’).parm(‘rotatex’)和char.parm.name()是一样的





补充funcButtons函数,如果传入的是zero all(即按了zero all按钮),那么就调用zeroall()函数,将参数设置为0



然后定义keyframeall函数,将当前的参数栏的值设置关键帧



然后在funcButtons函数里面调用keyframeall函数



结果,key all就将所有参数打关键帧了



此时,当我们undo的时候,并不是一次性的取消keyall,而已一行一行的undo



打开undo目录,我们的每一步记录,都会被放到这个目录里面



我们在选中节点之前,先将“select all controls”放到undos类的组中



结果,点击一次select all按钮,undos面板就出现一次select all controls



然后我们点击一次,select all controls就消失了,也就undo所有操作了



同样的,我们需要在zeroall和keyframeall函数里面加上“reset all controls”和“keyframe all controls”



这样再次点击keyframeall,就可以在undo面板看到keyframeall出现了



ctrl+z就取消了



然后在select all controls下面,加一句setselected(false),这样当选中节点的时候,取消选择char



接着,完善ui,为所有关节添加按钮



然后创建2个radio按钮,用来控制别的按钮的显示和隐藏



然后将原点按钮和别的方块按钮关联起来



这个原点按钮IK的togglee()开关,关联到方块按钮的hide()隐藏



对比,右边的原点按钮FK,就是关联到方块按钮的show()



结果,隐藏了



显示了



接下来就是繁琐的步骤了,关联所有



接下来就是获取这些按钮





ctrl双选多选设置,通过keyboardmodifiers函数导入键盘输入,赋值给modifiers,如果输入的是shift键就多选



创建setcharacter函数,如果没有选中一个绑定文件,就点击工具架,那么弹出一个警告



结果



接下来就是head和hand的按钮



创建一个slider,范围为-180到180,用于控制眼睛的旋转



导入slider按钮



然后自定义eyelidsliderctrl眼皮旋转滑竿函数,用滑竿的数值sldrSnd.value()去控制‘eyerightlidrotate’参数的值



结果



同样,为手部创建滑竿



sliderctrl函数



传入IK switch按钮



自定义IKFKswitch函数



设置background-color



修改按钮滑竿等颜色



最终效果




-------------------------------------------------------------------------
我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。
-------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......