1

ウィンドウが閉じられたときに破棄されるウィンドウ オブジェクトにリスナーをアタッチしようとしています。

OnCloseただし、window オブジェクトには、X をクリックして閉じると呼び出される type メソッドがありません(pymel.core.uitypes.Window理由が知りたい場合は、Autodesk Maya のものです)。

add_listenerアクティブなセッションに存在するリスナーを作成します。attach_listenerウィンドウが閉じたときにリスナーがそれ自体を削除するように作成しており、ウィンドウを接続する必要があります。

私の解決策は次のとおりです。

def attach_listener(window, event_name, function):
    def wrapper(*args, **kwargs):
        if window.exists():
            return function(*args, **kwargs)
        else:
            remove_listener(id_number)
    id_number = add_listener(event_name, wrapper)

id_number関数が宣言されるまで定義されていないため、これは明らかに機能しませんが、add_listener最初に定義せずに関数を渡すことはできません。id_numberに渡すことはできませんadd_listener。これを回避するにはどうすればよいですか?

4

2 に答える 2

2

この種のアプローチを試すことができます:

def attach_listener(window, event_name, function):
    def wrapper(*args, **kwargs):
        if window.exists():
            return function(*args, **kwargs)
        else:
            remove_listener(wrapper.id_number)
    wrapper.id_number = add_listener(event_name, wrapper)
于 2012-04-24T23:08:17.347 に答える
0

Shucks :\ 次の方法でハッキングできます。これでいけると思います……。

def attach_listener(window, event_name, function):
    IDlist = []
    def wrapper(*args, **kwargs):
        if window.exists():
            return function(*args, **kwargs)
        else:
            remove_listener(IDlist[0])
    IDlist.append(add_listener(event_name, wrapper))

これを行うための最もエレガントな方法ではありませんが、うまくいくはずです....それが私に知らせない場合。

于 2012-04-24T21:36:19.310 に答える