一半君的总结纸

听话只听一半君

#112 如何强制Maya的ui刷新以避免evalDeferred?

有时候写脚本时某步操作生效不是即时的,比如renderlayer的操作,很多命令都是去改变ui,但是这个改变是在maya idle的时候才发生的(类似evalDeferred的效果),但是下一个命令又会需要用到已经改变了的ui,这时候会出错,

除非你把下一步命令放在单独的proc里,然后evalDeferrd这个proc,但有时候需要自己拼很多字符串,需要自己确保escape sequence正确

比如当你想在自己的新创建的modelPanel里playblast的时候,你可能会

modelEditor -e -activeView $myNewModelEditor;

此时如果你下一行命令是playblast的话,就可能会出现错误

// Error: line xxx: no active view for playblast // 

如果想避免使用evalDeferred的麻烦,可以在需要刷新ui的地方插入:

python("from PyQt4 import QtGui;QtGui.qApp.processEvents()");

ps: 这和 refresh 命令 或者 scripJob -runOnce -idleEvent 均不同(他们并不能解决上面提到的问题)
同时,这也可以解决某些版本的Maya中如果你想自动按6,然后playblast的时候可能会遇到procedural texture来不及显示的问题

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: