Maya

【Maya:Python】ボタンを押した回数をカウントする

shamimatsu

maya2022、2019を使用
以前に書いた記事でifを使って処理を分ける方法も試していますが、条件指定が複雑になる処理は面倒なのでクリック回数を取得したいと思っていました。

classを使ってクリック回数を取得

python3

maya2022でpython3になったためコードを修正しました。
printにend=を入れるとステータスバーに文字が出力されます。
pymelで書く場合は(pm.displayInfo)を追加する
参考サイト:Maya print in status bar

# -*- coding: utf-8 -*-
import maya.cmds as cmds

class NumberCount:
    def __init__(self):
        self.i = 0

    def EmptyFrame(self, *arg):
        self.i += 1
        print(end=self.i)

    def show(self, *arg):
        cmds.window("CountWindow", title=u'Number Count', mnb=False, mxb=False)
        cmds.columnLayout(columnWidth=150, columnAttach=("both", 0), rowSpacing=0)
        cmds.button(label=u'Count', c=self.EmptyFrame)
        cmds.showWindow()

def main():
    w = NumberCount()
    w.show()
main()

クリック回数で処理を分岐

整数さえ取得出来てしまえばifを使っていくらでも処理を分けられます。
実用する場合は、処理を分けたい数に合わせてカウントを0に戻す処理も追加で必要になると思います。

if i == 1:
    print('1です')
if i == 2:
    print('2です')

python2.7

__init__(self)に関してはあまり理解できておらず、とりあえず最初に実行されるという認識で使っています。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

class NumberCount:
    def __init__(self):
        self.i = 0

    def EmptyFrame(self, *arg):
        self.i += 1
        print self.i,

    def show(self, *arg):
        cmds.window("CountWindow", title=u'Number Count', mnb=False, mxb=False)
        cmds.columnLayout(columnWidth=150, columnAttach=("both", 0), rowSpacing=0)
        cmds.button(label=u'Count', c=self.EmptyFrame)
        cmds.showWindow()

def main():
    w = NumberCount()
    w.show()
main()

シンプルな方法

python3

global を使う事によって関数の外にある変数を取得することが出来ました

# -*- coding: utf-8 -*-
import maya.cmds as cmds
import pymel.core as pm

i = 0

def EmptyFrame(*arg):
    global i
    i += 1
    pm.displayInfo(i)

cmds.window(title=u'Number Count', mnb=False, mxb=False)
cmds.columnLayout(cw=150, cat=("both", 0), rs=0)
cmds.button(label=u'Count', c=EmptyFrame)
cmds.showWindow()

python2.7

global を使う事によって関数の外にある変数を取得することが出来ました

# -*- coding: utf-8 -*-
import maya.cmds as cmds

i = 0

def EmptyFrame(*arg):
    global i
    i += 1
    print i,

cmds.window(title=u'Number Count', mnb=False, mxb=False)
cmds.columnLayout(cw=150, cat=("both", 0), rs=0)
cmds.button(label=u'Count', c=EmptyFrame)
cmds.showWindow()
ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました