我正在MATLAB GUI中的回调函数中运行drawow语句来更新按钮的状态.在回调开始时(具有高运行时)我改变了按钮的属性并强制使用drawow进行更新.在正确更新时,按钮仍然呈现为“向下推”而不是“禁用”.回调完成后,按钮再次更新,现在呈现为“禁用”.
采取以下最小(非)工作示例:
function simple_example()
h = figure();
% add a button, give it some properties and a callback
uicontrol(h,...
'Style','pushbutton',...
'String','I am enabled',...
'Units','normalized',...
'Position',[0.5 0.5 0.4 0.4],...
'Callback',@btn_callback);
end
function btn_callback(hObject, ~)
set(hObject,'Enable','off');
set(hObject,'String','I am disabled');
drawnow;
pause(3);
end
有没有办法改变这种行为,并在回调仍在执行时按钮显示为禁用?
最佳答案 正如您在询问外观时,使用uibuttongroup解决方法:
function simple_example()
h = figure();
b = uibuttongroup('Position',[0.5 0.5 0.4 0.4]);
bgcolor = b.BackgroundColor;
% add a button, give it some properties and a callback
uicontrol(b,...
'Style','pushbutton',...
'String','I am enabled',...
'Units','normalized',...
'Position',[-0.05 -0.05 1.1 1.1],...
'Callback',@btn_callback);
end
function btn_callback(hObject, ~)
set(hObject,'Enable','off');
set(hObject,'String','I am disabled');
drawnow;
pause(3);
end
在这里,您将按钮放在uibuttongroup中,通常将多个uibutton组合在一起,然后将按钮大小设置为大于实际的uibuttongroup,因此不显示边框.
但是,这让你失去按钮向下渲染.你可以通过改变uicontrolgroup的边界属性来解决这个问题.
更新:
这似乎是特定于操作系统的.在OS X上,就我所见,你的代码工作得很好. Windows,我不知道,但根据你的评论,我的版本和你的版本似乎都没有解决问题.另一方面,在Ubuntu上,我的答案解决了这个问题.