如何在GUI轴手柄中显示浮动图形

时间:2018-08-15 18:34:31

标签: matlab matlab-guide

我想在Matlab的GUI中显示当前时间,我想使用此link中的教程(GUI_17)来制作手表(或类似的手表)。代码如下:

    function [] = GUI_17()
    % Demonstrate how to have a running clock in a GUI, and timer use.
    % Creates a small little GUI which displays the correct time and is updated
    % every minute according to the system clock.
    %
    % Author:  Matt Fig
    % Date:  1/15/2010



    S.fh = figure('units','pixels',...
                  'position',[300 300 180 50],...
                  'menubar','none',...
                  'name','GUI_17',...
                  'numbertitle','off',...
                  'resize','off');
    S.tx = uicontrol('style','text',...
                     'unit','pix',...
                     'position',[35 10 110 30],...
                     'string',datestr(now,16),...
                     'backgroundc',get(S.fh,'color'),...
                     'fontsize',18,...
                     'fontweight','bold',...
                     'foregroundcolor',[.9 .1 .1]);
    STRT = 60 - str2double(datestr(now,'ss')); % So we can update every minute.             
    tmr = timer('Name','Reminder',...
                'Period',60,...  % Update the time every 60 seconds.
                'StartDelay',STRT,... % In seconds.
                'TasksToExecute',inf,...  % number of times to update
                'ExecutionMode','fixedSpacing',...
                'TimerFcn',{@updater}); 
    start(tmr);  % Start the timer object.
    set(S.fh,'deletefcn',{@deleter})  % Kill timer if fig is closed.

        function [] = updater(varargin)
        % timerfcn for the timer.  If figure is deleted, so is timer.
             % I use a try-catch here because timers are finicky in my
             % experience.
             try
                 set(S.tx,'string',datestr(now,16))
                 if ~str2double(datestr(now,'MM'))
                     X = load('gong');  % At the hour, sound a gong.
                     sound(X.y,X.Fs*2.5)  
                 end
                 clear X
             catch
                 delete(S.fh) % Close it all down.
             end
        end

        function [] = deleter(varargin)
        % If figure is deleted, so is timer.
             stop(tmr);
             delete(tmr);
        end
    end

我使用GUIDE创建了自己的GUI,并创建了一个空的axis1,我想将其用作原始时钟功能中图形定义的替代物。我从链接复制了整个功能,并将其添加到我的GUIDE程序的底部。这是我尝试替换函数的图形句柄:

 % S.fh = figure('units','pixels',...
%               'position',[300 300 180 50],...
 %               'menubar','none',...
 %               'name','GUI_17',...
 %               'numbertitle','off',...
 %               'resize','off');

通过以下方式:

    S.fh=handles.axes1;

但是它在框架中没有显示任何输出,正确的方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您想使用GUIDE工具完全复制教程的GUI,首先必须注意,在tutoirial中,时钟是使用text uicontrol创建的,因此很明显为什么要在GUI中插入axes

也。 GUI“窗口”(figure)是由GUIDE自动创建的,因此不需要添加斧头轴,除非您要手动创建小时,分钟等“指针”时钟,但是,在这种情况下,GUI会变得更加复杂。

使用GUIDE,您只需添加一个text uicontrol,然后,如果您想在本教程中精确复制时钟的形状,则可以设置{{1 }}和figure的uicontrol通过text

创建了GUI后,您可以将本教程中的功能插入其Property Inspector文件中,以使其正常工作,如下所示:

  • 在GUI .m中插入用于创建计时器及其初始化的代码
  • 使用图形的OpeningFcnhandles之间共享变量
  • 将图形的手形添加为figure uicontrolsupdater函数的附加输入参数

然后,您只需复制并粘贴deleterupdater函数,deleter单元数组的第三个元素将是您在其中设置的图形的句柄结构, {1}} varargin数据。

关于本教程中的代码,您必须在OpeningFcn函数中添加以下行:

timer

检索updater uicontrol的句柄。

使用GUIDE创建的整个GUI看起来像folloes(代码中的注释应突出显示上述相关修改):

fig_handles=varargin{3}