【问题标题】:Matlab, how to loop through a series of pushbuttons?Matlab,如何循环一系列按钮?
【发布时间】:2015-12-02 22:33:36
【问题描述】:

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

以下是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.

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

【问题讨论】:

  • 你没有在pushbutton1_Callback 中输出任何东西,因此L 完全没有被使用。尝试设置function [L]=pushbutton1_Callback(h0object, A)
  • 谢谢,我试过了,但上面写着Undefined function or variable "h1"
  • 嗯,这是一个明确的信息,不是吗?定义h1。我猜它来自您的h0object,但您需要明确告诉 MATLAB。
  • 谢谢,h1 不是已经定义为页面顶部的 GUI 对象了吗?
  • 不在你的函数内部...在这种情况下将它传递给函数。

标签: matlab loops matlab-figure


【解决方案1】:

你需要考虑函数的范围 函数内定义的所有变量,如果函数没有输出,则在函数执行完成时将被清理(删除)。

在图形对象的情况下,到按钮句柄的链接实际上仍会作为主图形窗口的子窗口存在于某处,但如果您以某种方式从“create_maze”输出句柄会更容易

定义线更安全

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

在 create_maze 结束时,而不是试图在嵌套函数上变得棘手,这会给你带来有限的优势,并且可能会产生轻微的开销。

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

即。确保函数只需要它们的输入变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多