如何在后台更新MATLAB GUI?

4

我有一个MATLAB GUI和一个独立的应用程序,该程序将数据写入文件。 我希望我的MATLAB GUI定期检查文件,并在更改时更新GUI。

在Java中,我会使用SwingUtils.Timer对象来执行类似的操作。 MATLAB是否具有计时器功能?我可能可以编写一个Java类并这样做,但是为了演示,我希望有一个快速且简单的纯MATLAB解决方案。

1个回答

12

在MATLAB中,您可以使用TIMER函数创建计时器对象。例如,以下代码将创建一个计时器对象,该对象在定时器启动后每10秒钟执行一次myFcn函数:

timerObject = timer('TimerFcn',@myFcn,'ExecutionMode','fixedRate',...
                    'Period',10.0);
计时器可以使用函数 STARTSTOP 来开始和停止。在使用完毕后,你应该使用DELETE删除计时器。在MATLAB文档中可以找到更多有关使用计时器的信息。
值得注意的是,如果你想要在 GUIDE GUI 中更新 axes 对象,则需要进行一些额外的 “技巧” 才能使其正常工作。你必须更改 GUIDE 中 axes 对象的 HandleVisibility 属性,或者显式地获取该句柄。为此,请按以下方式更改 timerObject 构造(假设 GUIDE 生成的 GUI 中的 axes 窗口称为 axes1):
timerData.axes = handles.axes1;
timerData.n    = 1;                  % some state needed for the plots.
timerObject = timer('TimerFcn',@myFcn,...
                    'ExecutionMode','fixedRate',...
                    'Period',10.0,...
                    'UserData', timerData);

那么在 myFcn 中,我们需要引用坐标轴对象。具体来说:

 function [] = myFcn(timerObj, event)
     timerData = get(timerObj, 'UserData');
     plot(timerData.axes, (1:n)/n, sin(20*2*pi*(1:n)/n));
     line( (1:n)/n, cos(20*2*pi*(1:n)/n, 'Parent', timerData.axes);
     timerData.n = timerData.n + 1;
     set(timerObj, 'UserData', timerData);
 end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接