【问题标题】:MATLAB GUI drawnow renderes button 'pushed down' instead of 'disabled'MATLAB GUI drawow 呈现按钮“按下”而不是“禁用”
【发布时间】:2016-02-23 21:19:01
【问题描述】:

我正在 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

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

【问题讨论】:

    标签: matlab matlab-guide


    【解决方案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 中,该组通常将几个 uibuttons 组合在一起,然后将按钮大小设置为大于实际的 uibuttongroup,因此边框不会出现。

    但是,这会让您失去按钮向下渲染。您可以通过更改 uicontrolgroup 的边框属性来恢复。

    更新:

    似乎特定于操作系统的。据我所知,在 OS X 上,您的代码运行良好。 Windows,我不知道,但根据您的评论,我的版本和您的版本似乎都无法解决问题。另一方面,在 Ubuntu 上,我的回答解决了问题。

    【讨论】:

    • 遗憾的是,这并不能解决我的问题。我在 win10 操作系统上运行 R2015a。当我尝试您的示例时,按钮周围的粗蓝色边框不会显示。但是,当您单击它时,整个按钮似乎会得到一个蓝色覆盖层(这似乎来自回调而不是来自当前选定的对象)。如果也可以删除它,我可以将颜色和背景颜色设置为与禁用按钮相同。
    • 它可能是特定于操作系统的。我刚刚在 wn10 和 win8 机器(都使用 R2015a)上进行了尝试,并且在上述示例的任一版本中都显示出相同的问题。
    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多