2015-11-21 5 views
4

Я запускаю оператор drawnow из функции обратного вызова в графическом интерфейсе MATLAB, чтобы обновить состояние кнопки. В начале обратного вызова (который имеет высокую производительность) я изменяю свойства кнопки и принудительно обновляю с помощью drawnow. При правильной настройке кнопка остается «нажатой» вместо «отключена». После завершения обратного вызова кнопка снова обновляется и теперь отображается как «отключена».MATLAB GUI pullow renderes button 'push down' вместо 'disabled'

Прими следующие minmal (не) рабочий пример:

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

Как вы спрашиваете о появлении здесь обходной путь с помощью 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.

Update:

Это кажется быть OS конкретных. На OS X ваш код работает отлично, насколько я вижу. Windows, я не знаю, но в соответствии с вашим комментарием ни моя версия, ни ваша проблема не устраняет проблему. С Ubuntu, с другой стороны, мой ответ решает проблему.

+0

К сожалению, это не решает мою проблему. Я запускаю R2015a на ОС win10. Когда я попробую ваш пример, толстая синяя рамка вокруг кнопки не отображается. Однако вся кнопка, кажется, получает синий оверлей, когда вы нажимаете на него (что, кажется, происходит от обратного вызова, а не от него, в текущем выбранном объекте). Если это также можно удалить, я могу установить цвет и цвет фона, чтобы они выглядели так же, как отключенная кнопка. –

+0

Можете ли вы попробовать мое редактирование? Тем не менее, цвет фона там ... – lhcgeneva

+0

Это может быть конкретная ОС. Я просто попробовал wn10 и win8-машину (оба с использованием R2015a), и обе показывают ту же проблему с любой версией вышеприведенного примера. –

 Смежные вопросы

  • Нет связанных вопросов^_^