フィルターのクリア

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 Center および File ExchangeMigrate GUIDE Apps についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by