import maya.cmds as mc import PySide.QtGui as gui import PySide.QtCore as core #オブジェクトを移動した時にスクリプトジョブを実行 class Huga(gui.QWidget): #イベントを終了させます def kill(self): for k in self.killLst: mc.scriptJob(kill = k) print("kill") #ウィンドウを閉じた場合に自動的にイベントを閉じる def closeEvent(self,e): self.kill() #スクリプトジョブで実行するイベント def on_job(self): print("jobOk") def on_start(self): #再度スタートした場合一度イベントをきる if len(self.killLst) == 3: self.killEvent() self.killLst=[] name = mc.ls(sl=1)[0] #rpトランスフォームの初期値 self.startRp = mc.xform(name,ws=1,rp=1,q=1) self.killLst.append(mc.scriptJob(attributeChange=[name+".tx",self.on_job])) self.killLst.append(mc.scriptJob(attributeChange=[name+".ty",self.on_job])) self.killLst.append(mc.scriptJob(attributeChange=[name+".tz",self.on_job])) def __init__(self): #イベントリスト self.killLst=[] #init super(Huga,self).__init__() self.setWindowFlags(core.Qt.WindowStaysOnTopHint) #create self.lineA =gui.QLineEdit() btnB = gui.QPushButton("start") #event btnB.clicked.connect(self.on_start) #layout layoutA = gui.QVBoxLayout() layoutA.addWidget(btnB) self.setLayout(layoutA) self.show() huga = Huga()
2018年1月25日木曜日
MayaのQtでスクリプトジョブ
Mayaでスクリプトジョブを作成する場合、スクリプトを使い終わったときに
スクリプトジョブを中断しないといつまでも残ります。
この場合scriptJob(kill = イベント番号)とするのですが、Qtのヴィジットを
閉じるタイミングで中断できたら便利ですよねー
だけどpythonのデストラクタ(def __del__:)だとどのタイミングで破棄される
のかがわからないので、ヴィジットのcloseEventをオーバーライドしてウィンドウ
を閉じるタイミングでリストに入れたスクリプトジョブ番号をkillしてみました。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿