Я хочу прикрепить логотип или изменить весь фон Дизайнера приложений uifigure
. Как это может быть сделано?
Как настроить фон фигуры App Designer?
Ответы (2)
Если вы хотите установить сплошной цвет фона для всей фигуры, существует документированный способ сделать это, например:
% When creating a new uifigure: fig = uifigure('Color',[R G B]) % if the uifigure already exists: fig.Color = [R G B];
- Если вы хотите изменить цвет фона только для определенного региона, вы можете добавить
uipanel
без заголовка или границы (uipanel(...,'BorderType','none','Title','','BackgroundColor',[R G B])
). Если вы хотите установить изображение в качестве фона всей фигуры:
function q41602238a %% Turn off some warnings: warning off Matlab:structOnObject warning off Matlab:HandleGraphics:ObsoletedProperty:JavaFrame %% 0. Create a uifigure: app = uifigure(); %% 1. Get a handle to the webwindow: while true try win = struct(struct(app).Controller).Container.CEF; break catch pause(0.1); % Give the figure (webpage) some more time to load end end %% 2. Find the data_tag of the DOM element we want to edit: data_tag = char(struct(app).Controller.ProxyView.PeerNode.getId); %% 3. Manipulate the DOM via a JS command while true try win.executeJS(['dojo.style(dojo.query("[data-tag^=''' data_tag ''']")[0],"background-image","url(https://upload.wikimedia.org/wikipedia/commons/8/80/Wikipedia-logo-v2.svg")']); break catch pause(0.1); % Maybe JS is still not ready. end end
Результат:
Если вы хотите установить изображение в качестве фона только для определенного региона:
function q41602238b %% Turn off some warnings: warning off Matlab:structOnObject warning off Matlab:HandleGraphics:ObsoletedProperty:JavaFrame %% 0. Create a some element: app = uifigure(); pnl = uipanel(app); %% 1. Get a handle to the webwindow: while true try win = struct(struct(app).Controller).Container.CEF; % disp(win.URL); break catch pause(0.1); % Give the figure (webpage) some more time to load end end %% 2. Find the id of the DOM element we want to edit: data_tag = char(struct(pnl).Controller.ProxyView.PeerNode.getId); widgetId = win.executeJS(['dojo.getAttr(dojo.query("[data-tag^=''' data_tag ''']")[0],"widgetid")']); %% 3. Manipulate the DOM via a JS command dojo_style_prefix = ['dojo.style(dojo.query("#' widgetId(2:end-1) '")[0],']; while true try win.executeJS([dojo_style_prefix '"background-image","url(https://upload.wikimedia.org/wikipedia/commons/8/80/Wikipedia-logo-v2.svg")']); break catch pause(0.1); % Maybe JS is still not ready. end end
Результат:
Заметки:
Последние два примера основаны на этих двух сообщениях: 1, 2, а принцип работы заключается в добавлении записи
background-image: "..."
к свойствуstyle
некоторого желаемого элемента пользовательского интерфейса (который оказывается HTMLdiv
).Инструмент для программного управления фигурами App Designer можно найти в этом репозитории GitHub.
Изображение в качестве примера представляет собой
.svg
, что интересно, потому что мы можем экспортировать "обычные" фигуры MATLAB в этот формат, а затем использовать их в качестве фона дляuifigure
:)
К сожалению, я пока не могу комментировать, поэтому вот еще один ответ.
Начиная с Matlab 2017a, у контроллера больше нет свойства Container. Это работает:
warning off Matlab:structOnObject
warning off Matlab:HandleGraphics:ObsoletedProperty:JavaFrame
win = struct(struct(struct(app).Controller).PlatformHost).CEF;
data_tag = char(struct(app).Controller.ProxyView.PeerNode.getId);
win.executeJS(['dojo.style(dojo.query("[data-tag^=''' data_tag ''']")[0],"background-image","url(https://upload.wikimedia.org/wikipedia/commons/8/80/Wikipedia-logo-v2.svg")']);
Существует также возможность найти все активные веб-окна с помощью
webWindows = matlab.internal.webwindowmanager.instance.findAllWebwindows();
к сожалению, я еще не выяснил, какое окно принадлежит какому UIFigure (можно было бы использовать Title или Position для фильтрации, но два одинаковых UIFigures вызовут проблемы).
Отказ от ответственности, Давиде Миани разместил эту информацию здесь: https://undocumentedmatlab.com/blog/customizing-uifigures-part-1#comment-406524
app designer
. - person asys   schedule 12.01.2017