필터 지우기
필터 지우기

UI Control callback function problem

조회 수: 1 (최근 30일)
Pau Papu
Pau Papu 2016년 11월 12일
댓글: Walter Roberson 2016년 11월 24일
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!

채택된 답변

Walter Roberson
Walter Roberson 2016년 11월 12일
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
Pau Papu
Pau Papu 2016년 11월 24일
편집: Walter Roberson 2016년 11월 24일
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 2016년 11월 24일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Migrate GUIDE Apps에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by