Matlab,如何循环一系列按钮?

时间:2015-12-02 22:33:37

标签: matlab loops matlab-figure

我的程序创建了5个按钮,我需要根据矩阵A中的值更改颜色。所以我在main中定义A,然后在main的末尾我调用函数create_maze(A)。 / p>

以下是create_maze(A):

function create_maze(A)
A

% create 5X5 pushbuttons

scr = get(0, 'screensize');
f1 = figure(1);
set(f1, 'menubar', 'none');
set(f1, 'position', [scr(1) scr(2) scr(3) scr(4)]);

h1 = uicontrol('Style', 'pushbutton',...
    'ForegroundColor', 'blue',...
    'Position', [200 200 100 100],...
    'Callback', pushbutton1_Callback);
h2 = uicontrol('Style', 'pushbutton',...
    'ForegroundColor', 'blue',...
    'Position', [300 200 100 100],...
    'Callback', pushbutton1_Callback);
h3 = uicontrol('Style', 'pushbutton',...
    'ForegroundColor', 'blue',...
    'Position', [400 200 100 100],...
    'Callback', pushbutton1_Callback);
h4 = uicontrol('Style', 'pushbutton',...
    'ForegroundColor', 'blue',...
    'Position', [500 200 100 100],...
    'Callback', pushbutton1_Callback);
h5 = uicontrol('Style', 'pushbutton',...
    'ForegroundColor', 'blue',...
    'Position', [600 200 100 100],...
    'Callback', pushbutton1_Callback);

function [L] = pushbutton1_Callback(h0object, A)
    % here I put the pushbuttons together in an array
    L=[h1, h2, h3, h4, h5];
for i = 1:size(A,1)
    if i == 0
    set(L{i},'Backgroundcolor','w');
    elseif i == 1
    set(L{i},'Backgroundcolor','b');
    elseif i == 2
    set(L{1},'Backgroundcolor','g');
    elseif i == 2
    set(L{i},'Backgroundcolor','y');
    end
end
end
end

不幸的是我得到了:

Error using create_maze/pushbutton1_Callback (line 164)
Not enough input arguments.

有人可以帮我解决这个循环吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您需要考虑功能的范围 当函数完成执行时,将清除(删除)函数中定义的任何未由其输出的变量。

对于图形对象,指向按钮手柄的链接实际上仍然存在于主图形窗口的子窗口,但如果以某种方式从'create_maze'输出句柄,它将变得更容易

定义行

更安全

L = [h1,h2,h3,h4,h5];

在create_maze结束时,而不是试图使用嵌套函数变得棘手,这将在这里给你有限的优势,并且可能有轻微的开销。

查看mathworks网站,了解有关嵌套函数中变量范围的更多信息,但为了安全起见,请确保所有函数都可以在不依赖于其他已定义变量的情况下运行。

IE中。确保函数只需要输入变量