0

我正在尝试在 matlab 中制作Simon游戏的一个版本,我想让按钮在按下它后恢复到原来的颜色,但是按钮保持新颜色。我正在使用的代码是:

clc, clf, clear
h1=figure(1);
button1=uicontrol(h1, 'Style','Pushbutton', 'Units','Normalized','Position',...
[0.1 0.1 0.2 0.2],'Backgroundcolor', [1 0 0],...
'Callback',['value1=get(button1,''Value''); if value1==1',...
'set(button1,''Backgroundcolor'',[0 1 0]); else ,',...
'set(button1, ''BackgroundColor'',''r''), end,value2=get(button1,''Value'')']);

如果运行它,您会注意到颜色保持绿色,我该怎么做才能自动将其恢复为红色?

4

1 回答 1

2

您的代码中的主要问题是按下按钮仅检查 的Value属性button1,但不会更改它以供将来按下。因此,Valueofbutton1总是被评估为 0,因此按钮永远不会改变颜色。

以下工作代码似乎可以满足您的要求:

clc, clf, clear
h1 = figure(1);
button1_state = 1;
button1_callback = ...
   ['if (button1_state == 1), set(button1, ''Backgroundcolor'', ''g''),' ...
    'else set(button1, ''BackgroundColor'', ''r''), end, ' ...
    'button1_state = ~button1_state;'];
button1 = uicontrol(h1, 'Style', 'Pushbutton', 'Units', 'Normalized', ...
   'Position', [0.1 0.1 0.2 0.2], 'Backgroundcolor', 'r', ...
   'Callback', button1_callback);

我在这里所做的是创建一个变量button1_state来保存当前的“状态” button1(1 代表红色,0 代表绿色)。在回调操作中,我根据当前状态更改按钮的背景颜色,然后翻转状态。

希望能帮助到你!

PS请注意,出于可读性原因
,我将回调操作单独放在字符串中。button1_callback它实际上会展开成这样:

if (button1_state == 1)
   set(button1, 'Backgroundcolor', 'g')
else
   set(button1, 'BackgroundColor', 'r')
end
button1_state = ~button1_state;
于 2012-05-22T22:19:37.020 回答