【问题标题】:Maya Window UI create Event?Maya Window UI 创建事件?
【发布时间】:2014-10-26 15:28:11
【问题描述】:

我想弄清楚如何注册一个 ui 创建事件。我想要实现的是在 renderViewWindow 打开时运行一个脚本。 阿维德

【问题讨论】:

  • 我不确定如何完全按照您的要求进行操作,但是如果您尝试在渲染开始时运行脚本,也许可以考虑使用渲染设置中的 Pre Render Mel? Here's a related post 可能有用
  • 不,那是行不通的,因为即使 renderView 是 openend 并且未渲染,我也希望脚本运行。或者例如,如果我想在 scriptEditor 打开时运行一个脚本,我希望发生一些事情。

标签: python maya


【解决方案1】:

一种方法是使用 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 空闲时都会调用该方法。请谨慎使用。

[编辑] 您可以尝试检查 maya.OpenMayaUI.MQtUtil.findWindow(self.window_name) 而不是检查 cmds.lsUI(windows=True) 中的 self.window_name。

【讨论】:

  • 感谢您的精彩代码!我工作得很好。因为它经常调用 cpu 使用率一直在 20% 运行。那可能太多了。但它是使用 call 方法的好方法。我仍然需要弄清楚它是如何工作的^^
  • 很高兴它有帮助!如果您认为它有用,请接受答案。谢谢你,干杯!
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2018-01-05
相关资源
最近更新 更多