MATLAB GUI drawow渲染按钮’向下推’而不是’禁用’

我正在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上,我的答案解决了这个问题.

点赞