How to retrieve datas from multiples GUIs into a function ?

조회 수: 1 (최근 30일)
CHAZAUD Mathilde
CHAZAUD Mathilde 2019년 5월 20일
댓글: CHAZAUD Mathilde 2019년 5월 20일
Hello everyone !
I have several GUI windows to collect parameters and I want to use them in functions.
The problem is, I store datas from edit text boxes into arrays like that :
typex=getappdata(hObject,'typex');
typex(end+1)=str2double(handles.typex(1).String);
handles.typex(1).String=sprintf('block %d',numel(typex)+1);
disp(typex)
setappdata(hObject,'typex',typex);
assignin('base','typex',typex);
Then, in a callback I use them in the same GUI:
xw=getappdata(handles.xw(1),'xw');
xe=getappdata(handles.xe(1),'xe');
nx=getappdata(handles.nx(1),'nx');
typex=getappdata(handles.typex(1),'typex');
%Choix du programme de rafinement a executer
if(typex==1)
n=length(nx);
for i=1:n
xwt=xw(i);
xet=xe(i);
nxt=nx(i);
create_block_uniform_X(xwt, xet, nxt)
end
That does works.
But in an other function, I use that to retrieve the datas:
X=getappdata(0,'X')
Y=getappdata(0,'Y')
Z=getappdata(0,'Z')
nx=getappdata(0,'nx')
xw=getappdata(0,'xw')
xe=getappdata(0,'xe')
ny=getappdata(0,'ny')
yw=getappdata(0,'yw')
ye=getappdata(0,'ye')
nz=getappdata(0,'nz')
zw=getappdata(0,'zw')
ze=getappdata(0,'ze')
The thing is that for X,Y,Z it does retrieve the datas (X, Y, Z are the outputs arguments from the previous fonction 'create_block_uniform') but that return empty arrays for the others... I don't understand
Z =
Columns 1 through 13
0 1.1111 2.2222 3.3333 4.4444 5.5556 6.6667 7.7778 8.8889 10.0000 0 0 0
Columns 14 through 18
0 0 0 0 0
nx =
[]
xw =
[]
xe =
[]
Could someone help me ?
Thanks !

채택된 답변

Dennis
Dennis 2019년 5월 20일
The difference is where you store your values. The setappdata/getappdata needs an object to store your data, which is provided as the first argument. So when you use hObject in the callback of a pushbutton your data is with that pushbutton. If you want to retrieve your data in another callback or another function you need to use the correct handle to the object where your data is stored. This is what you did in your first example.
In your second example you use '0' as argument, where to store your data. This is the Matlab root, personally i prefer to not store data at the matlab root, because it is easy to lose track of variables. More importantly, your values nx, xw, xe have never been stored there.
How do you call your second function? If you pass handles to that function you can access your variables exactly as in your first example.
On another topic, if you have many variables you want to store and retrieve you can use one (data) structure instead of multiple variables:
data.mw=1;
data.nx=2;
data.xe=3;
data.X=4;
data.Y=5;
data.Z=6;
setappdata(hObj,'data',data) %one variable 'data' instead of 6
  댓글 수: 2
CHAZAUD Mathilde
CHAZAUD Mathilde 2019년 5월 20일
Thank you for your answer !
I tried to '0' because if I wrote the line
xw=getappdata(handles.xw(1),'xw');
it returns an error
Undefined variable "handles" or class "handles.xw".
Error in create_grid2 (line 7)
xw=getappdata(handles.xw(1),'xw');
The function in which I want to use my datas is called 'create_grid2'.
The thing I really don't understand is that is the workspace, all my variables seem to be stored.
That can be usefull as I have a lot of variables, thanks !
CHAZAUD Mathilde
CHAZAUD Mathilde 2019년 5월 20일
I solve my problem by replacing hObject with 0:
% typex=getappdata(hObject,'typex');
% typex(end+1)=str2double(handles.typex(1).String);
% handles.typex(1).String=sprintf('block %d',numel(typex)+1);
% disp(typex)
setappdata(0,'typex',typex);
% assignin('base','typex',typex);

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by