亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

MayaQTinterfacesinaclass

2019-11-14 17:44:03
字體:
來源:轉載
供稿:網友

Most tutorials online have suggested the way to fire commands inside QT interfaces launched n Maya (via cmds.loadUi – not involving pyQT) is to add a string PRoperty like:

 

+command="myPythonInstance.pythonCommand()"
 

Pretty craptastical – it can only fire commands inside a specific python module, the name of which has to be known when you’re laying out your interface.

Ideally, we’d like to have our interface instanced from a python class. This would allow us, amongst other things, so have multiple, independant instances. However it seems that a “self” reference can’t get passed to an interface, which is what you’d reallly like to do.

+command=self.pythonCommand

A (reasonably hacky) solution is to create the widget callbacks from inside our python class, after we’ve loaded the interface via cmds.loadUi().

import maya.cmds as cmdsclass myUi(object):    def __init__(self, *args):        uiFile = '/path/to/uiFile.ui'        rlDialog = cmds.loadUI(f=uiFile)        cmds.showWindow(rlDialog)        cmds.button( "ovrAdd_btn", edit=True, command=self.overrideAdd )    def overrideAdd(self, *args):        print 'do something!'

Which is slightly better, but we’re still referring to our widget by a string name. This is problematic if you have multiple instances of this class – targeting “ovrAdd_btn” is going to get confusing. We need to find out exactly which control, in amongst the whole widget mess, is the one that we’ve spawned when we’re called cmds.loadUI().

Sadly, loadUI() doesn’t give us any help in this department. So, and here’s the hacky bit, we can trawl through the widgets to find those belonging to our class instance, store them in a dict and then we can refer back to them by a simplified name. Easy!

import maya.cmds as cmdsdef widgetPath(windowName, widgetNames):    """        @param windowName: Window instance name to search    @param widgetNames: list of names to search for    """        returnDict = {}    mayaWidgetList = cmds.lsUI(dumpWidgets=True)        for widget in widgetNames:        for mayaWidge in mayaWidgetList:            if windowName in mayaWidge:                if mayaWidge.endswith(widget):                    returnDict[widget] = mayaWidge                        return returnDictclass myUi(object):    def __init__(self, *args):        uiWidgetList = ['ovrAdd_btn']        uiFile = '/path/to/uiFile.ui'        rlDialog = cmds.loadUI(f=uiFile)        self.uiObjects = widgetPath(rlDialog, uiWidgetList)                cmds.showWindow(rlDialog)                cmds.button( self.uiObjects["ovrAdd_btn"], edit=True, command=self.overrideAdd )    def overrideAdd(self, *args):        print 'do something!'

Trawling through Maya’s widget list isn’t particularly elegant, but you only have to do it once per class initialisation, so there isn’t too much of a cost. The advantage is that you can now have per-instance widget names.

Why not just use pyQT proper, you ask? Installing external dependencies isn’t always an option for our less techy brethren, or easily done in a studio-wide fashion. Using pyQT would be far better (and give all sorts of other benefits), but if you’re constrained to using vanilla maya / python, this seems to do the trick.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产第二页| 久久久久99精品久久久久| 91九色综合久久| 亚洲激情视频网| 91精品久久久久久久久青青| 成人乱人伦精品视频在线观看| 欧美丝袜美女中出在线| 狠狠躁18三区二区一区| 久久99精品久久久久久琪琪| 国产精品视频一区二区三区四| 国产精品欧美一区二区| 久久久精品影院| 91视频-88av| 日韩欧美精品网站| 国产免费一区二区三区在线观看| 欧美精品成人91久久久久久久| 成人h视频在线| 精品无人区太爽高潮在线播放| 91精品国产91久久久久福利| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲欧洲在线播放| 欧美成人精品在线| 精品一区精品二区| 精品久久久久久中文字幕一区奶水| 精品国产成人av| 欧美日韩一二三四五区| 91久久精品美女高潮| 久久这里有精品视频| 97在线观看免费高清| 亚洲国产精品一区二区三区| 日韩福利在线播放| 日韩在线视频观看正片免费网站| 韩日精品中文字幕| 亚洲成色777777在线观看影院| 欧洲日本亚洲国产区| 欧美日韩国产在线看| 人体精品一二三区| 国产ts人妖一区二区三区| 国产精品美腿一区在线看| 欧美亚洲成人网| 日本在线观看天堂男亚洲| 亚洲奶大毛多的老太婆| 日韩精品在线观看视频| 亚洲丝袜在线视频| 日韩在线观看免费全集电视剧网站| 亚洲网站视频福利| 日本精品一区二区三区在线播放视频| 亚洲国产女人aaa毛片在线| 国产欧美一区二区白浆黑人| 国产经典一区二区| 久久伊人精品一区二区三区| 欧美激情亚洲一区| 国产精品美女久久久久久免费| 国产成人啪精品视频免费网| 成人免费福利视频| 亚洲欧美一区二区三区久久| 欧美成年人在线观看| 国产黑人绿帽在线第一区| 欧美最猛性xxxxx免费| 亚洲欧美变态国产另类| 97精品国产97久久久久久免费| 国产91色在线播放| 日韩欧美在线字幕| 91在线直播亚洲| 国产成人久久精品| 欧美xxxx做受欧美.88| 国产日韩在线亚洲字幕中文| 精品国产91乱高清在线观看| 亚洲人成网站在线播| 日韩国产在线看| 欧美在线视频在线播放完整版免费观看| 欧美性猛交xxxx久久久| 亚洲国产精品久久久久秋霞蜜臀| 国产丝袜高跟一区| 国产午夜精品美女视频明星a级| 久久韩国免费视频| 国产成人精品一区二区三区| 色偷偷噜噜噜亚洲男人的天堂| 日韩欧美一区二区三区| 色青青草原桃花久久综合| 国产成人一区二区三区小说| 亚洲色图13p| 久久99精品久久久久久噜噜| 国产成人精品av在线| 精品亚洲aⅴ在线观看| 色先锋久久影院av| 国产成人精品在线播放| 日韩在线欧美在线| 久久久精品电影| 日韩美女av在线| 亚洲精品久久久久久下一站| 亚洲人成电影在线| 精品美女久久久久久免费| 亚洲石原莉奈一区二区在线观看| 欧美另类极品videosbest最新版本| 最近2019中文字幕大全第二页| 国产日本欧美一区二区三区| 亚洲精品福利免费在线观看| 久久精品亚洲热| 亚洲人成伊人成综合网久久久| 日韩av在线最新| 久久国产一区二区三区| 97碰碰碰免费色视频| 97精品视频在线观看| 亚洲精品视频播放| 日韩精品免费电影| 日韩美女av在线免费观看| 91高清免费在线观看| 欧美激情视频一区二区三区不卡| 日本高清不卡在线| 国内成人精品视频| 91产国在线观看动作片喷水| 日韩大陆欧美高清视频区| 日韩在线中文字幕| 久久精品一本久久99精品| 欧美黑人视频一区| 日本成人精品在线| 最近2019中文字幕mv免费看| 亚洲国产欧美精品| 亚洲精品国产免费| 91精品国产自产在线观看永久| 亚洲一区二区日本| 欧美视频国产精品| 日韩成人性视频| 久久777国产线看观看精品| 精品久久久久久久中文字幕| 日韩一级黄色av| 久久久久久久久久久av| 国产精自产拍久久久久久蜜| 亚洲少妇中文在线| 在线观看国产欧美| 国产做受69高潮| 91影院在线免费观看视频| 日本一区二区在线免费播放| 日韩精品欧美国产精品忘忧草| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩av观看网址| 国产精品a久久久久久| 国产精品一区专区欧美日韩| 日韩精品在线观看一区二区| 国内精品久久影院| 欧美激情综合色| 国产日韩欧美中文| 欧美在线性爱视频| 成人亚洲综合色就1024| 中文字幕欧美国内| 亚洲国产又黄又爽女人高潮的| 亚洲欧美精品一区| 久久中文精品视频| 精品久久久久久久久久国产| 国产一区深夜福利| 欧美最猛性xxxxx(亚洲精品)| 精品一区二区三区四区| 久久亚洲精品国产亚洲老地址| 欧美在线激情网| 啪一啪鲁一鲁2019在线视频| 欧美激情综合色| 日韩免费在线观看视频| 国产精品久久久久久久久男| 日韩视频在线一区| 国产精品成人一区二区三区吃奶| 欧美理论电影在线播放| 欧美高清视频一区二区| 91视频国产一区|