Note that your code will be simpler and more robust when data is passed between functions, e.g. as input/output arguments, nested functions, or using guidata. Magically accessing variable in other workspace is always slow, complex, and liable to bugs. Read this to know more:
(App Designer) Dropdown menu detect variables in workspace.
13 次查看(过去 30 天)
显示 更早的评论
I'm try to familiar myself with apps designer. How to create a dropdown menu with the list of variables in workspace. so, user only choose their selected variable/dataset.
采纳的回答
Ameer Hamza
2018-4-24
Yes, it is possible. Here is one way. Add a drop-down menu to the app. In the COMPONENT BROWSER right-click app.UIFigure and add a startupFcn callback for figure object. You can define the newly created function like this
function startupFcn(app)
vars = evalin('base', 'whos');
cell_array = cell(size(vars));
for i=1:length(vars)
cell_array{i} = vars(i).name;
end
app.DropDown.Items = cell_array;
end
where DropDown is the name of your drop-down menu. Now start the app, the drop-down menu will enlist all the variables from the workspace.
更多回答(3 个)
Abdelmalek Benaimeur
2019-2-21
i tried the method you gave us and it worked, but the problem i found is when i open the app i've made, and when i add a new matrix in the workspace it doesn't show up automatically in the dropdown menu until i close the app and re-open it again
is there a way to solve this problem please?
1 个评论
Ameer Hamza Khan
2019-2-22
One way is to use timer callback. You can use a timer to automatically update the menu at regular (say after every 1 second). Instead of writing my code in startupFcn() you can create a new function inside your app, paste this code in it and assign that function to a timer as callback.
Abdelmalek Benaimeur
2019-2-22
please could you show me how, beacause i'm new to appdesigner and i didnt' figure out how to do it
1 个评论
Ameer Hamza Khan
2019-2-22
The attached file contain an example code. In summary i created a property and a callback function.
properties (Access = private)
menu_timer % Description
end
methods (Access = private)
function update_menu(app, ~, ~)
vars = evalin('base', 'whos');
cell_array = cell(size(vars));
for i=1:length(vars)
cell_array{i} = vars(i).name;
end
app.DropDown.Items = cell_array;
end
end
and added following figure startup and close functions:
function startupFcn(app)
app.menu_timer = timer('ExecutionMode', 'fixedRate', ...
'Period', 1, ...
'TimerFcn', @app.update_menu);
start(app.menu_timer);
end
% Close request function: UIFigure
function UIFigureCloseRequest(app, event)
stop(app.menu_timer);
delete(app.menu_timer);
delete(app)
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Develop Apps Using App Designer 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!