On this page |
このオブジェクトは、XMLメニュー定義に基づいてQMenuを構築し、そのメニュー内のショートカットが割り当てられているアイテムを有効にするためのキーボードショートカット制御も簡単にします。
エクスプレッションやスクリプトコードなどのスクリプトアイテムは、該当するメニューアイテムのIDとラベルが(定義されていれば)格納されるkwargsに渡されます。
メソッド ¶
__init__(context, kwargs, xmlfile, xmlstring)
このオブジェクトを作成する時、xmlstring
またはxmlfile
のどちらかが必ず指定されている必要があります。
両方とも指定した場合、xmlstring
のみが使用されます。
context
このメニューのホットキーコンテキスト。
この値は、'.'を含んでいないid
値の前に追加されます。
kwargs
すべてのスクリプトコードに送信される追加のkwargsアイテム。
xmlstring
解析するオプションのXMLメニュー文字列。
xmlfilename
検索と解析をするオプションのXMLメニューファイル名。
parseString(xmlstring)
XMLメニュー文字列を解析し、その内容をこのメニュー内に集約させます。
xmlstring
有効なXMLを含んだ文字列。
parseFile(xmlfile)
XMLメニューファイルを解析し、その内容をこのメニュー内に集約させます。 検索は実行されないので、ファイルが見つかるようにここにはXMLメニューファイルのフルパスを指定してください。
xmlfile
有効なXMLファイルのファイル名とパス。
parseFiles(xmlfilename)
指定したファイル名にマッチしたXMLメニューファイルをHOUDINI_PATHから検索し、それらのファイルを解析し、 それらの内容をこのメニューに集約させます。
xmlfilename
有効なXMLファイルのファイル名。
generateMenu(kwargs, menu, hotkeyaction)
→ hou.qt.Menu
既に解析済みのXMLメニュー定義に基づいてQMenu階層を生成します。 トグルアイテムの可視性、有効性、ラベル、現行値を取得する関数は、この時に評価されます。
kwargs
XMLファイル内のすべての関数とスクリプトに渡されるkwargsに追加されます。 現在選択されているアイテムなど、コンテキスト関連のデータをこれらの関数に渡す方法がこれです。
hotkeyaction
'ActionItem'エントリーがアクティブになった時に呼び出される関数。 これがNoneの場合、どの'ActionItem'もアクティブにすることができないので、どの'ActionItem'もメニューから省略されます。
handleKeyPress(keystring, kwargs, hotkeyaction)
→ bool
Hotkey Managerで割り当てられているショートカットキーに基づいて、メニューアクションを照会し発動します。
keystring
が制御されたらTrue、そうでないならFalseを返します。
keystring
hou.qt.qtKeyToString()
で指定する文字列と同じキープレスの文字列表現。
kwargs
XMLファイル内のすべての関数とスクリプトに渡されるkwargsに追加されます。 現在選択されているアイテムなど、コンテキスト関連のデータをこれらの関数に渡す方法がこれです。
hotkeyaction
'ActionItem'エントリーがアクティブになった時に呼び出される関数。 これがNoneの場合、どの'ActionItem'もアクティブにすることができないので、どの'ActionItem'もメニューから省略されます。
Examples ¶
以下のサンプルでは、このオブジェクトを使用してXMLファイルを準備する方法を説明しています。 これは、イベントハンドラー内で呼び出し可能なhou.qt.Menuを必要時に生成します。
self._mymenuparser = XmlMenuParser(context = "h.pane.parms", xmlfile = "c:/temp/menu.xml") ... def contextMenuEvent(self, event): # 評価時にmenu.xml内のエクスプレッションまたはコードに渡される独自のkwargs menukwargs["parm"] = menucontextparm menukwargs["parmname"] = menucontextparm.name() menu = self._mymenuparser.generateMenu(kwargs = menukwargs, hotkeyaction = self._processHotKeyAction) if not menu.isEmpty(): menu.popup(event.globalPos())
XMLファイル:
<?xml version="1.0" encoding="UTF-8"?> <menuDocument> <menu> <actionItem id="set_keyframe"> <label>Set a Keyframe</label> </actionItem> <actionItem id="rem_keyframe"> <labelExpression>return kwargs["label"] + " - " + kwargs["parmname"]</labelExpression> </actionItem> <actionItem id="revert_defs"> </actionItem> <toggleItem> <label>Parm Locked</label> <enableExpression><![CDATA[ return kwargs['parm'] is not None ]]></enableExpression> <valueExpression><![CDATA[ return kwargs['parm'].isLocked() ]]></valueExpression> <scriptCode><![CDATA[ kwargs['parm'].lock(not kwargs['parm'].isLocked()) ]]></scriptCode> </toggleItem> <actionItem id="lock_parm"> <context><expression><![CDATA[ if kwargs['parm'] is not None and kwargs['parm'].isLocked(): return False return True ]]></expression></context> </actionItem> <actionItem id="unlock_parm"> <context><expression><![CDATA[ if kwargs['parm'] is not None and kwargs['parm'].isLocked(): return True return False ]]></expression></context> </actionItem> <separatorItem/> <subMenu> <label>Expressions</label> <actionItem id="toggle_expr"/> <actionItem id="edit_expression"/> <actionItem id="expand_values"/> <actionItem id="use_python"/> <actionItem id="use_old_language"/> </subMenu> </menu> </menuDocument>