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してみました。
2018年1月15日月曜日
登録:
コメント (Atom)