将按钮颜色更改回原始值

时间:2012-05-22 21:16:14

标签: matlab

我正在尝试在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'')']);

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

1 个答案:

答案 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