我的程序创建了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.
有人可以帮我解决这个循环吗? 谢谢!
答案 0 :(得分:0)
您需要考虑功能的范围 当函数完成执行时,将清除(删除)函数中定义的任何未由其输出的变量。
对于图形对象,指向按钮手柄的链接实际上仍然存在于主图形窗口的子窗口,但如果以某种方式从'create_maze'输出句柄,它将变得更容易
定义行
更安全L = [h1,h2,h3,h4,h5];
在create_maze结束时,而不是试图使用嵌套函数变得棘手,这将在这里给你有限的优势,并且可能有轻微的开销。
查看mathworks网站,了解有关嵌套函数中变量范围的更多信息,但为了安全起见,请确保所有函数都可以在不依赖于其他已定义变量的情况下运行。
IE中。确保函数只需要输入变量