我想弄清楚如何註冊一個ui創建事件。我想要實現的是在renderViewWindow打開時運行腳本。 Arvid瑪雅窗口UI創建事件?
0
A
回答
2
你可以這樣做的一種方法是使用scriptJob命令。在Python中,你可以做到這一點使用是這樣的:
import maya.cmds as cmds
import pymel.core as pm
class WindowWatcher():
""" A class to watch for a particular window in Maya """
def __init__(self, window_name, on_open_callback, on_close_callback=None):
self.window_name = window_name
self.on_open_callback = on_open_callback
self.on_close_callback = on_close_callback
self.window_opened = False
def check_for_window_open(self):
if not self.window_opened:
if self.window_name in cmds.lsUI(windows=True):
self.on_open_callback.__call__()
self.window_opened = True
else:
if not self.window_name in cmds.lsUI(windows=True):
self.window_opened = False
if self.on_close_callback:
self.on_close_callback.__call__()
if __name__ == "__main__":
# demo
render_window_name = "renderViewWindow"
def on_open_render_window(arg1, arg2):
# your on_window_open code here
print "Render Window opened!"
print "Arg1: %s Arg2: %s" % (arg1, arg2)
script_editor_name = "scriptEditorPanel1Window"
def on_open_script_editor():
# your on_window_open code here
print "Script Editor opened!"
render_window_watcher = WindowWatcher(render_window_name,
pm.windows.Callback(on_open_render_window, "Hello", "World")
)
script_editor_watcher = WindowWatcher(script_editor_name, on_open_script_editor)
cmds.scriptJob(event=["idle",
pm.windows.Callback(render_window_watcher.check_for_window_open)])
cmds.scriptJob(event=["idle",
pm.windows.Callback(script_editor_watcher.check_for_window_open)])
即使被警告,使用「空閒」事件並不總是建議,因爲該方法將被稱爲每瑪雅閒置時間。這是要謹慎使用。
[編輯]你可以嘗試檢查maya.OpenMayaUI.MQtUtil.findWindow(self.window_name),而不是在cmds.lsUI(窗口= TRUE)檢查self.window_name。
相關問題
- 1. 創建瑪雅UI
- 2. 透明的窗口在瑪雅2017
- 3. 瑪雅出口three.js所JSON
- 4. 瑪雅:創建順利出口臨時MFnMEsh
- 5. 嵌入瑪雅modelEditor成PyQt的UI
- 6. 瑪雅出口到閃存10
- 7. 瑪雅edms與s3
- 8. 在雅虎日曆中創建事件
- 9. 試圖創建瑪雅pymel烘烤物質腳本
- 10. 瑪雅FBX插件不支持材質?
- 11. 在Mac OS X和瑪雅
- 12. 瑪雅2011網絡渲染
- 13. 瑪雅命令不從* .MA
- 14. 創建InputOnly窗口
- 15. javascript窗口事件
- 16. C#創建窗口 - 定義父窗口
- 17. 西格瑪js事件
- 18. 瑪雅2012到MD5出口商(導出多個網格)
- 19. ThreeJS從瑪雅2017年出口造成的問題
- 20. Qt創建窗口小部件
- 21. PHP窗口創建隱藏文件
- 22. VST插件創建多個窗口
- 23. 在窗口上創建新文件
- 24. 創建網站窗口小部件/ API
- 25. 如何在kendo UI中創建確認彈出窗口?
- 26. 創建Kendo UI彈出窗口需要幫助
- 27. 創建方形窗口C++
- 28. Wpf創建窗口鎖
- 29. 無法創建tkinter窗口
- 30. Process.Start()創建無限窗口
我不確定如何完全按照要求進行操作,但如果您在渲染開始時嘗試運行腳本,可以考慮使用渲染設置中的預渲染梅爾? [這是一個相關的帖子](http://stackoverflow.com/questions/21488519/maya-querying-previous-render-information/21488609#21488609),可能是有用的 – mhlester 2014-10-26 21:06:21
沒有,不會工作,因爲即使renderView是openend並沒有呈現我想要一個腳本運行。或者,例如,如果我想在scriptEditor打開時運行腳本,我希望發生一些事情。 – arvidurs 2014-10-26 23:35:24