如何在matlab gui中更新日期和时间

时间:2016-01-21 05:31:00

标签: matlab time time-series matlab-guide

function demo1()
        H.f = figure('Name','DEMO1');
        set(H.f,'Units','Pixels','Position',get(0,'ScreenSize'));% adjust figure size as per the screen size
        H.pb1 = uicontrol('style','push',...
                         'units','pixels',...
                         'position',[400 800 280 30],...
                         'fontsize',14,...
                         'string', datestr(now)); % datestr(now) is used to get current date and time                 
end 

我如何在gui中获得实时时钟

1 个答案:

答案 0 :(得分:0)

这不是一件容易执行的任务,您可能想要考虑一下您的设计。这可以包含在一个类中,但不一定。如果您不想这样做,您可以修改底层的Java对象,但这似乎过度了。我已经用更多C风格的方式构建了这个结构,将所有数据放在结构中并编写以struct为参数的函数。但是,由于matlab不支持传递内存位置,因此需要在修改后返回结构。

我选择使用计时器对象。您需要将计时器对象存储在某个位置,因为当您不再使用它时需要将其删除。此外,我添加了一些使用启动功能和停止功能的代码。对于计时器对象。这是为了在开发阶段看到对象实际完成。最终项目不需要这样做。此外,您可能希望处理窗口关闭的情况。这将导致当前实现崩溃,因为计时器独立于图形,并且在图形关闭时不会停止。你可能想在关闭数字时调用stop_timer。无论如何这里是代码:

function test()
h.f = figure('Name','DEMO1');
set(h.f,'Units','Pixels','Position',get(0,'ScreenSize'));% adjust figure size as per the screen size
h.pb1 = uicontrol('style','push',...
        'units','pixels',...
        'position',[400 800 280 30],...
        'fontsize',14,...
        'string', datestr(now)); % datestr(now) is used to get current date and time
h = start_clock(h);
pause on;
pause(15);
pause off;
h = stop_clock(h);    
end

function obj = start_clock(obj)
%TasksToExecute calls the timer object N times
t = timer('StartDelay', 0, 'Period', 1,... % 'TasksToExecute', inf, ...
      'ExecutionMode', 'fixedRate');
t.StartFcn = {@my_callback_fcn, 'My start message'};
t.StopFcn = { @my_callback_fcn, 'My stop message'};
t.TimerFcn = {@set_time, obj};
obj.t = t;
start(obj.t);
end

function obj = stop_clock(obj)
stop(obj.t);
delete(obj.t);
end

function set_time(obj, event, arg)
    arg.pb1.String = datestr(now);
end

function my_callback_fcn(obj, event, arg)
txt1 = ' event occurred at ';
txt2 = arg;
event_type = event.Type;
event_time = datestr(event.Data.time);
msg = [event_type txt1 event_time];
disp(msg)
disp(txt2)
end