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

时间:2015-11-21 11:23:37

标签: matlab matlab-guide

我正在MATLAB GUI中的回调函数中运行drawnow语句来更新按钮的状态。在回调开始时(具有高运行时),我改变了按钮的属性并强制使用drawnow进行更新。在正确更新时,按钮仍然呈现为“向下推”而不是“禁用”。回调完成后,按钮会再次更新,现在呈现为“已禁用”。

采取以下最小(非)工作示例:

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

有没有办法改变这种行为,并且在回调仍在执行时按钮显示为禁用?

1 个答案:

答案 0 :(得分:1)

正如你在询问外观这里使用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 上,我的回答解决了这个问题。