環境 (nuke と呼ばれるグラフィック プログラム) から、メニュー項目を追加して関数に接続できるグローバル オブジェクトが与えられます。このグローバル オブジェクトは次のように機能します。
menu.addCommand("Do This!", lambda: DoThings())
Python モジュールを動的に読み取り、モジュール関数をグローバル メニュー オブジェクトの項目として追加したいと考えています。そのためのクラスを書きました。私のクラスの簡略版:
class mymenu():
.
.
.
def _builMenuFromPath(self, basepath, module):
items = []
# ...
# there is code to build the items list. this is a list of the python filenames
# ...
if len(items) > 0:
for item in items:
try:
f = getattr(__import__(module + "." + item), item) # item is the python filename of an module in the folder with the python files and module is the folder
menu.addCommand(item, lambda: f.call()) # f.call() is a function in the dynamic loaded python file
except Exception, e:
pass
動的インポートは非常にうまく機能します。ただし、生成されたすべてのメニュー項目は、最後にインポートされた関数にリンクされています。すべてのメニューアイテムが同じことをするように。
私はプロのプログラマーではありません。だから私は単純な間違いをしていると思います。
ご協力いただきありがとうございます。