myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Memo : Python PPG onthefly

自分はPython詳しくないので、昨日(数時間前)スクリプトを書きながら学んだことをメモっておきます:

JScript で オンザフライのPPGを作る時に Logic に function + .toString() をつけるだけで済むから便利ですね。

これはPythonでは toString() みたいな方法はありません。

ちょっと面倒だけど、一応方法あります。

このリンク(英語)を見て、知りました。


一つは「'''」の間にファンクションを入れて、ストリングとしてLogicに入れることです。


sLogic = '''
def test_OnClicked():
#do something
'''

という感じです。

これは VBScript と比べて、さほど不便でもないな。

もうひとつは

TXT にファンクションを書いて、openとread でファイルを読み込んでロジックにする。


f = open("C:/My Documents/callbacks.txt")
s = f.read()
oLayout.Logic = s


そして、JScriptと同じく「\」を使うときに「\\」を書かなきゃいけない。

しかs、「\\」を「'''」の中に入れると、x2にしなきゃいけない!

普段書いてる「\\」を「\\\\」にすること。

つまり「\」を書きたいときに「\\\\」を書かなければなりませんということです。
合計x4ですね。


そうしないと、「EOL while scanning string literal」という良く分からんエラーが出てしまいます。

PPG OnTheFlyの例はこんな感じ:

from win32com.client import constants as c
xsi = Application
oProp = XSIFactory.Createobject( 'CustomProperty' )
oProp.name = "Test"

oLay = oProp.PPGLayout
oItem = oLay.AddButton("Run", "Run Test")
oItem.SetAttribute( c.siUICX, 315 )
oLay.Language = "Python"

sLogic = '''

def Run_OnClicked():
log = Application.LogMessage
log ("Python TEST")
log ("\\\\")
'''
oLay.Logic = sLogic
xsi.InspectObj( oProp )

# こうなるはず:
# INFO : Python TEST
# INFO : \