Photoshop脚本-更新窗口中的进度条

问题描述 投票:5回答:3

我想显示我的一个Photoshop脚本的进度条。如果我确实在按钮单击事件中进行工作,那么我将能够更新进度栏而不会出现任何问题。

对于此脚本,不需要用户交互。我想要:-显示窗口-完成工作后更新进度条-关闭窗口

var win = new Window("dialog{text:'Progress',bounds:[100,100,400,150],\ bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");
win.show();

for(...){
    //do work here

    //update progress
    win.bar.value = ...;
}

win.close();

问题是,win.show();阻塞,直到用户关闭窗口。我也尝试过添加onClose处理程序,然后立即关闭窗口,但窗口永远不会显示。

关于如何获得进度条的任何想法?

javascript photoshop flash-cs5 adobe-scriptui
3个回答
5
投票

窗口类dialog是MODAL对话框,需要您在继续执行之前将其关闭。

使用类window创建一个非阻塞窗口:

var win = new Window("window{text:'Progress',bounds:[100,100,400,150],bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");
win.show();

for(...){
    //do work here

    //update progress
    win.bar.value = ...;
}

win.close();

但是,您将在此处遇到下一个问题。根据您在循环中所执行的操作,photoshop不会足够快地更新UI以查看进度条的移动。这是我卡住的地方:/


0
投票

我已经在WaitForRedraw片段上运行了一次,也许它将使ps重绘UI?没有时间检查它,只是一个想法。

function WaitForRedraw(){
var eventWait = charIDToTypeID("Wait")
var enumRedrawComplete = charIDToTypeID("RdCm")
var typeState = charIDToTypeID("Stte")
var keyState = charIDToTypeID("Stte")
var desc = new ActionDescriptor()

desc.putEnumerated(keyState, typeState, enumRedrawComplete)
executeAction(eventWait, desc, DialogModes.NO)
}

0
投票

您可能要考虑使用app.refresh()或waitForRedraw()。有一个window.update(),但是它似乎并没有为我解决这个问题。

这里是来源:http://www.davidebarranca.com/2012/10/scriptui-window-in-photoshop-palette-vs-dialog/

© www.soinside.com 2019 - 2024. All rights reserved.