我想弄清楚如何注册一个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