Dynamically create new axes and associated callbacks in GUIDE
Show older comments
I made a GUI using GUIDE that plays multiple videos. Each video is displayed in an axes which was created in GUIDE. However, I need to dynamically create axes depending on the number of videos that the user selects.
My initial hack is to create a single axes in GUIDE and set the Visible attribute to 'off'. Then on the Callback from the filebrowser make a bunch of copies of the axes:
for idx = 1:num_videos
eval(['handles.axes' num2str(idx) ' = handles.axes1']);
% set size, location, tags, etc.
end
Then in a second loop, set the visibility:
for idx = 1:num_videos
eval(['handles.axes' num2str(idx) '.Visible = ''on''']);
end
However, I'm really looking for a better way to do this. Can I just initialize an object of the axes class and set the attributes that way and how can I do it without using eval? Also, would the Parent be the handles object itself or the base Figure itself (matlab.ui.Figure)?
Secondly, if I want to (dynamically) create an associated button, how can I dynamically add callback functions? Using GUIDE, it creates a separate Callback for each button based on the tag, but if I'm creating a button in the .m file what is the best way to accomplish this?
3 Comments
Geoff Hayes
on 6 Apr 2020
matquest - do you want more than one axes so that the user can view more than one video at a time? If so, how do you "place" the axes in the GUI dynamically? I'm trying to understand why more than one axes is needed (and why one can't be just re-used for each video).
Stephen23
on 6 Apr 2020
handles.(sprintf('axes%d',idx)) = ...
Or avoid the entire complexity by using a much simpler and more efficient array of handles and indexing:
handles.myaxes = gobjects(N,1);
...
handles.myaxes(idx) = ...
matquest
on 6 Apr 2020
Answers (0)
Categories
Find more on Interactive Control and Callbacks in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!