【发布时间】:2014-01-07 09:46:06
【问题描述】:
我的原始脚本中有计时器,它运行良好,它每 60 秒重新运行一次我的脚本。
我现在已经使用 GUIDE 将相同的脚本移动到 GUI 中,并且我已经将它粘贴到 GUIDE 提供的 GUI 代码中,它工作正常。但是,当我包含原始脚本中的计时器代码时,它不起作用,并且每当我运行它时都会显示此错误:
??? Error using ==> axes
Invalid object handle
Error in ==>
SoftwareMonitoringToolGUI>SoftwareMonitoringToolGUI_OpeningFcn at 100
axes(handles.axes5);
Error in ==> gui_mainfcn at 221
feval(gui_State.gui_OpeningFcn, gui_hFigure, [],
guidata(gui_hFigure), varargin{:});
Error in ==> SoftwareMonitoringToolGUI at 51
gui_mainfcn(gui_State, varargin{:});
我的 GUI 看起来像这样,无论脚本中是否包含计时器代码,它都保持不变,即 MATLAB 仍然构建它。不同的是,当我包含计时器代码时,MATLAB 提供了上述错误:
当我只删除计时器代码时,它会再次工作(但没有我需要使用计时器的刷新功能)。我的句柄是正确的,因为 MATLAB 正在 GUI 窗口中生成我的图形。
定时器代码,放置在 GUI 代码的开头:
function SoftwareMonitoringToolGUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
% ***TIMER FUNCTION***
%**************************************************************************
%
Period = 60; % Update period in seconds
tim = timer('Period', Period, 'ExecutionMode', 'fixedRate',...
'TimerFcn', 'SoftwareMonitoringToolGUI');
start(tim)
stop(tim)
我希望计时器每 60 秒刷新一次 GUI。原因是每次执行我的脚本时都会计算新数据。想法?
【问题讨论】:
-
问题似乎在计时器调用的函数范围内。脚本与 GUI(功能)在这方面可能有所不同。您必须提供更多详细信息 - 实际上,您可以完整发布一个较小的测试用例是最好的。你可能会通过创建这样一个测试用例找出答案,想想它。
-
如果我在这里将计时器定义设计为一个函数并将其包含在脚本的最顶部会怎样。即
function timer = code I inserted above我该怎么做?我想我明白你的意思。我将修改我的帖子,并尝试提供更多关于代码中发生的事情的详细信息,也许还有一些图像。 -
附加线程以包含 GUI 图像以确保完整性。让我知道您可能需要的其他详细信息。
标签: matlab function loops user-interface timer