我正在尝试在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'')']);
如果您运行它,您会注意到颜色保持绿色,我该怎么做才能自动将其恢复为红色?
答案 0 :(得分:2)
代码中的主要问题是按下按钮只会检查Value
的{{1}}属性,但不会更改它以供将来按下。因此,button1
的{{1}}总是被评估为0,因此按钮永远不会改变颜色。
以下工作代码似乎可以满足您的需求:
Value
我在这里做的是创建一个变量button1
,它保存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);
的当前“状态”(红色为1,绿色为0)。在回调操作中,我根据当前状态更改按钮的背景颜色,然后翻转状态。
希望有所帮助!
P.S
请注意,出于可读性原因,我将回调操作单独放在字符串button1_state
中。它实际上会展现出来:
button1