Effacer les filtres
Effacer les filtres

UI Control callback function problem

1 vue (au cours des 30 derniers jours)
Pau Papu
Pau Papu le 12 Nov 2016
Commenté : Walter Roberson le 24 Nov 2016
I have done a small program based on show in a static text the values of the slider everytime I touch the slider. I'm working in dot notation ( e.g. no using get and set )and without using GUIDE. I don't know how to use the callback function for make it works, even I know the command that works.
Here is the program:
%%Figure Creation
fig = figure
fig.Color = 'b'
fig.Tag= 'fig1'
fig.Name= 'SliderGUI'
%%Slider Creation
slider = uicontrol('Parent',fig,'Style','Slider','Min',0,'Max',1, ...
'SliderStep',[0.01 0.10], 'Position', [100,100,300,25]);
slider.BackgroundColor = 'k'
slider.Tag = 'slider1'
slider.Callback=@sliderCallback
%%Create of UIControl Static text
static = uicontrol ('Parent',fig,'Style','text','Position', ...
[100,150,300,250], 'Value', 0 ,'String', 'Slider Value');
static.FontName = 'Arial';
static.FontSize =100;
static.BackgroundColor = 'c'
static.Tag = 'static1'
static.Callback=@staticCallback
%%Slider Callback function
% Here is where I have problems
function sliderCallback(slider,eventdata)
static.String=slider.Value
end
The command
static.String=slider.Value
Works good, but I don't know how to define the callback function. I try a lot of things but anything have worked.
Thank's for the help!

Réponse acceptée

Walter Roberson
Walter Roberson le 12 Nov 2016
Change
function sliderCallback(slider,eventdata)
static.String=slider.Value
end
to
function sliderCallback(slider,eventdata)
static = findobj(ancestor(slider, 'figure'), 'Tag', 'static1');
static.String = slider.Value
end
That is, your problem is that "static" is not in scope in the sliderCallback so you have to locate it.
  5 commentaires
Pau Papu
Pau Papu le 24 Nov 2016
Modifié(e) : Walter Roberson le 24 Nov 2016
Thanks for the answer Mr.Robertson,
I understand your explanation but I tried to run this last small code but doesn't work. I will appreciate to understand more the context. For what I have read, I should do that:
fig1=figure
handles=guihandles(fig1)
And then, fill the fields:
handles.filename=''; etc
And finally store this data using guidata:
guidata(fig1,handles)
I'm understanding that well? I have some doubts concerning what is a handle...
I have some other questions:
1-You say that in my code, static is a handle because everytime I create a uicontrol ( or a figure ) it's by definition a handle object from the handle class?
2- In your code, you first create a structure of handles but you can add fields that are not handles ( as character vectors, and other structures...) using guihandles/guidata. It's better to proceed like that? Because I am not habituated to use guihandles/guidata.
3-There is any reference for understand all that?
Thank you very much!
Walter Roberson
Walter Roberson le 24 Nov 2016
graphics routines were defined as returning handles long before object oriented classes existed in MATLAB.
People tend to over-use adding non-handle fields to the handles structure. It is a useful structure, but it can lead to performance problems. GUIDE uses the handles structure for every graphics callback, so for every GUIDE graphics callback, the entire contents of the handles structure is copied. If a lot of non-handle data has been stored in handles then that can take a lot of time and memory. Most callbacks only need access to a modest number of entries from the handles structure. My suggestion is that you never save large arrays to the handles structure: instead store them using setappdata(), as then you can request just that data with getappdata() when you need it, without it being copied when it is not needed.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Migrate GUIDE Apps dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by