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 : \