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中获得实时时钟
答案 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