在MATLAB GUI中使用另一个图中的一个图中的变量

用户名

我有一个使用GUI Layout Toolbox创建的MATLAB GUI。此GUI有一个主要图形。主要图形有一个按钮,可调用次要图形。有一个通过主要图形调用的函数,该函数从次要图形访问一些变量。在代码的开头或直到打开辅助图形的位置,一切正常。一旦辅助控件打开,如果我保持打开状态,该函数调用将正常工作,但是如果我关闭辅助图形,该函数调用将停止工作。

以下是我如何定义变量和函数调用的摘要:

S.Fig1 = figure();
S.var1 = uicontrol('parent',S.Fig1,...
                      'style','edit');
S.Fig2 = figure();
S.var2 = uicontrol('parent',S.Fig2,...
                      'style','edit');

S.var1与函数调用var1_call()相关联,在该函数内部,我正在检查S.var2的值。如果辅助图形是打开的,则正确提供了值,否则该语句将显示一条错误消息,提示“无效的句柄对象”

请让我知道是否无法同时定义两个图形,如果可以的话,如何在打开一次fig2之后检查是否将其关闭。

谢谢

添加以下示例代码:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%测试脚本以检查是否从主图中调用了新图%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%

function [] = TestCallingNewWindow()

SCR = get(0,'Screensize');  % Get screensize.

% Open Figure
S.fh = figure('numbertitle','off',...
              'menubar','none',...
              'units','pixels',...
              'position',[SCR(3)/2-800 ,SCR(4)/2-100 , 500, 200],...
              'name','TestCallingWindow',...
              'resize','off');

% Create PushButtons
S.pb1 = uicontrol('style','pushbutton',...
                  'units','pixels',...
                  'position',[20 120 200 30],...
                  'string','Open New Window',...
                  'fontsize',12);

for i=1:6
    S.Select(i) = uicontrol('parent',S.fh,...
                      'style','checkbox',...
                      'units','pixels',...
                      'position',[250 (165-((i-1)*30)) 30 20],...
                      'string',sprintf('%d',i),...
                      'enable','on',...
                      'fontsize',10);
    S.Type(i) = uicontrol('parent',S.fh,...
                      'style','text',...
                      'units','pixels',...
                      'position',[300 (165-((i-1)*30)) 60 20],...
                      'string','Data',...
                      'enable','on',...
                      'fontsize',10);
    S.TypeVal(i) = uicontrol('parent',S.fh,...
                      'style','edit',...
                      'units','pixels',...
                      'position',[365 (165-((i-1)*30)) 80 20],...
                      'string','0',...
                      'enable','on',...
                      'fontsize',10);
end

% Create the Pop-up Figure
S.popfh = figure('numbertitle','off',...
              'menubar','none',...
              'units','pixels',...
              'position',[SCR(3)/2-200 ,SCR(4)/2-100 , 300, 200],...
              'name','Pop-Up Window',...
              'resize','off',...
              'visible','off');

for i=1:6
    S.popSelect(i) = uicontrol('parent',S.popfh,...
                      'style','checkbox',...
                      'units','pixels',...
                      'position',[50 (165-((i-1)*30)) 30 20],...
                      'string',sprintf('%d',i),...
                      'enable','on',...
                      'fontsize',10);
    S.popType(i) = uicontrol('parent',S.popfh,...
                      'style','text',...
                      'units','pixels',...
                      'position',[100 (165-((i-1)*30)) 60 20],...
                      'string','Data',...
                      'enable','on',...
                      'fontsize',10);
    S.popTypeVal(i) = uicontrol('parent',S.popfh,...
                      'style','edit',...
                      'units','pixels',...
                      'position',[165 (165-((i-1)*30)) 80 20],...
                      'string','0',...
                      'enable','on',...
                      'fontsize',10);
end

% Set callback functions
set(S.Select(:),'callback',{@main_call,S})
set(S.TypeVal(:),'callback',{@main_call,S})
set(S.pb1,'callback',{@pb1_call,S}) 
set(S.popSelect(:),'callback',{@pb1_call,S})
set(S.popTypeVal(:),'callback',{@pb1_call,S})

% Function Definitions
function [] = main_call(varargin)
    [h,S] = varargin{[1,3]};  % Get calling handle and structure.
    popWin = findobj('type','figure','name','Pop-Up Window');
    for idx = 1:6
        if(~isempty(popWin))
            popenable = get(S.popSelect(idx),'Value');
        else
            popenable = 0;
        end
        if(popenable == 0)
            enable = get(S.Select(idx),'Value');
            if(enable == 1)
                data = str2double(get(S.TypeVal(idx),'String'));
                if(~isempty(popWin))
                    set(S.popTypeVal(idx),'string',data);
                end
            end
        else
            data = str2double(get(S.popTypeVal(idx),'String'));
        end
    end
end

% po-up window
function [] = pb1_call(varargin)
    [h,S] = varargin{[1,3]};  % Get calling handle and structure.

    set(S.popfh,{'visible'},{'on'});
    for idx = 1:6
        popenable = get(S.popSelect(idx),'Value');
        if(popenable == 0)
            enable = get(S.Select(idx),'Value');
            if(enable == 1)
                data = str2double(get(S.TypeVal(idx),'String'));
                set(S.popTypeVal(idx),'string',data);
            end
        else    % if popenable is 1
            data = str2double(get(S.popTypeVal(idx),'String'));
        end
    end
end

end
Raab70

如何命名您的人物:

S.Fig1 = figure('name','figure1');

S.Fig2 = figure('name','figure2');

然后,您可以通过以下方式找到它们findobj

findobj('type','figure','name','figure2');

如果打开,将返回图形手柄;如果关闭,则返回空白。因此,此调用将检查该图是否存在:

~isempty(findobj('type','figure','name','figure2'))

资料来源:

如何检查图形是否打开以及如何将其关闭?

http://www.mathworks.com/help/matlab/ref/findobj.html

http://www.mathworks.com/help/matlab/ref/isempty.html

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%获得该线路上的错误:set(S.popfh,{'visible'},{'on'});pb1_call如果该图中被关闭,如上所述。因此,除此以外,您应该具有:

if ~isempty(findobj('type','figure','name','Pop-Up Window'))
    set(S.popfh,{'visible'},{'on'});
else
    S.popfh=figure('name','Pop-Up Window','Visible','on');
end

这更加健壮,可以在尝试更改图形属性之前确保图形已打开。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab:使用另一个函数作为参数创建函数

来自分类Dev

MatLab:在函数中分配的变量可以在另一个函数中使用

来自分类Dev

在MATLAB中将一个矩阵与另一个矩阵相加

来自分类Dev

使用MATLAB mex将向量与另一个向量分配时的分割错误

来自分类Dev

Matlab-使用另一个向量作为限制来创建向量

来自分类Dev

Matlab-在一个图像中识别与另一个图像重叠的对象

来自分类Dev

MATLAB-在一个图中绘制多个曲面拟合

来自分类Dev

当一个极限是另一个积分变量的函数时,在matlab中进行双重积分

来自分类Dev

将一个数组的变量放在Matlab中另一个数组的行中

来自分类Dev

MATLAB:在另一个函数中使用for循环

来自分类Dev

在MATLAB中的另一个子图中绘制一个子图

来自分类Dev

在MATLAB中计算一个矩阵与另一个矩阵之间的差矩阵

来自分类Dev

在matlab中集成一个调用另一个函数的函数

来自分类Dev

从图中提取子图以绘制另一个图,并将变量分配给Matlab中的轴标签

来自分类Dev

使用一个数组值访问另一个数组元素Matlab

来自分类Dev

向量元素是另一个向量Matlab的索引

来自分类Dev

如何在Matlab中使用另一个向量中的值对矩阵进行排序?

来自分类Dev

将变量从一个文件导入到另一个MATLAB

来自分类Dev

如何在另一个数组matlab中使用数据访问数组

来自分类Dev

一个元素跟随另一个matlab的次数计数

来自分类Dev

如何在Matlab中使用另一个数组的所有值引用一个数组的索引

来自分类Dev

通过另一个uicontrol MATLAB启用一个uicontrol

来自分类Dev

Matlab Timer函数启动另一个功能

来自分类Dev

如何访问在Matlab的另一个文件中定义的函数中的那些变量?

来自分类Dev

Matlab将数据传递到另一个GUI

来自分类Dev

使一个按钮按另一个按钮。Matlab GUI

来自分类Dev

如何在另一个 SCSS 文件的 SCSS 颜色图中使用颜色变量?

来自分类Dev

一个绘图中的两个图 matlab

来自分类Dev

将多个概率图(在 Matlab 中使用 probplot )组合在一个图中,用于不同大小的数组

Related 相关文章

  1. 1

    Matlab:使用另一个函数作为参数创建函数

  2. 2

    MatLab:在函数中分配的变量可以在另一个函数中使用

  3. 3

    在MATLAB中将一个矩阵与另一个矩阵相加

  4. 4

    使用MATLAB mex将向量与另一个向量分配时的分割错误

  5. 5

    Matlab-使用另一个向量作为限制来创建向量

  6. 6

    Matlab-在一个图像中识别与另一个图像重叠的对象

  7. 7

    MATLAB-在一个图中绘制多个曲面拟合

  8. 8

    当一个极限是另一个积分变量的函数时,在matlab中进行双重积分

  9. 9

    将一个数组的变量放在Matlab中另一个数组的行中

  10. 10

    MATLAB:在另一个函数中使用for循环

  11. 11

    在MATLAB中的另一个子图中绘制一个子图

  12. 12

    在MATLAB中计算一个矩阵与另一个矩阵之间的差矩阵

  13. 13

    在matlab中集成一个调用另一个函数的函数

  14. 14

    从图中提取子图以绘制另一个图,并将变量分配给Matlab中的轴标签

  15. 15

    使用一个数组值访问另一个数组元素Matlab

  16. 16

    向量元素是另一个向量Matlab的索引

  17. 17

    如何在Matlab中使用另一个向量中的值对矩阵进行排序?

  18. 18

    将变量从一个文件导入到另一个MATLAB

  19. 19

    如何在另一个数组matlab中使用数据访问数组

  20. 20

    一个元素跟随另一个matlab的次数计数

  21. 21

    如何在Matlab中使用另一个数组的所有值引用一个数组的索引

  22. 22

    通过另一个uicontrol MATLAB启用一个uicontrol

  23. 23

    Matlab Timer函数启动另一个功能

  24. 24

    如何访问在Matlab的另一个文件中定义的函数中的那些变量?

  25. 25

    Matlab将数据传递到另一个GUI

  26. 26

    使一个按钮按另一个按钮。Matlab GUI

  27. 27

    如何在另一个 SCSS 文件的 SCSS 颜色图中使用颜色变量?

  28. 28

    一个绘图中的两个图 matlab

  29. 29

    将多个概率图(在 Matlab 中使用 probplot )组合在一个图中,用于不同大小的数组

热门标签

归档