2016-03-17 3 views
2

У меня есть несколько графических интерфейсов, которые я создал с помощью GUIDE под Matlab 2010b. После обновления Matlab до 2015b я вижу, что некоторые из виджетов теперь имеют другой дизайн, а мой старый графический интерфейс имеет несоответствующий внешний вид. Есть ли способ обновить графический интерфейс, чтобы иметь совместимый внешний вид с 2015b? Вот скриншот, показывающий несогласованные виджеты. mismatched widgetsОбновление виджета GUIDE GUI до последней версии Matlab

Я видел ссылки на некоторые сценарии обновления, которые сделают это для вас, но я не вижу ссылок в официальной документации по Matlab.

+0

Вы говорите о цвете фона uicontrols? – Suever

ответ

1

У MATLAB нет официального способа сделать это. Это различие, которое вы видите, связано с различием значений по умолчанию uicontrol и uipanelBackgroundColor между релизами. У меня есть сценарий ниже, который может фактически загрузиться в файл .fig (созданный с помощью GUIDE или иначе) и заменить BackgroundColorsuicontrol или uipanel объектами с текущим цветом фона по умолчанию. Затем он сохраняет файл .fig при сохранении резервной копии оригинала.

function varargout = updatebgcolor(figfile) 
    % updatebgcolor - Updates the uicontrol background colors 
    % 
    % USAGE: 
    % updatebgcolor(figfile) 

    data = load(figfile, '-mat'); 

    % Types of controls to update 
    types = {'uicontrol', 'uipanel'}; 

    % Get the current default background color 
    bgcolor = get(0, 'DefaultUIControlBackgroundColor'); 

    % Switch out all of the background colors 
    data2 = updateBackgroundColor(data, types, bgcolor); 

    % Resave the .fig file at the original location 
    movefile(figfile, [figfile, '.bkup']); 
    save(figfile, '-struct', 'data2') 

    if nargout; varargout = {data2}; end 
end 

function S = updateBackgroundColor(S, types, bgcolor) 

    % If this is not a struct, ignore it 
    if ~isstruct(S); return; end 

    % Handle when we have an array of structures 
    % (call this function on each one) 
    if numel(S) > 1 
     S = arrayfun(@(s)updateBackgroundColor(s, types, bgcolor), S); 
     return 
    end 

    % If this is a type we want to check and it has a backgroundcolor 
    % specified, then update the stored value 
    if isfield(S, 'type') && isfield(S, 'BackgroundColor') && ... 
      ismember(S.type, types) 
     S.BackgroundColor = bgcolor; 
    end 

    % Process all other fields of the structure recursively 
    fields = fieldnames(S); 
    for k = 1:numel(fields) 
     S.(fields{k}) = updateBackgroundColor(S.(fields{k}), types, bgcolor); 
    end 
end 
+0

Я удивлен, что нет собственного способа сделать это, так как кажется, что кто-нибудь, кто обновит Matlab и будет поддерживать GUI, столкнутся. – Fadecomic

+1

@Fadecomic Я согласен. Хотя, есть много других несоответствий графики, которые действительно вызовут проблемы при переносе графического интерфейса между этими двумя, которые действительно не могут быть решены автоматическим способом. Это изменение цветов также не является безупречным, поскольку оно отменяет любые пользовательские спецификации фона. – Suever

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

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