Problem with variable not being global in creating GUI
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
RIshabh Golchha
el 7 de En. de 2016
Comentada: Walter Roberson
el 7 de En. de 2016
I am exploring MATLAB GUI by writing code rather than GUIDE.
Attached is the code. What I want is that is my test_value text box should have access to handles.latitude once it is updated. For Checking this I set it such that when i type anything in it, it just should show me the latitude value. But it isnt.
Error being shown is
Error using simple_gui_4/test_output_Callback (line 40) Not enough input arguments.
Error while evaluating UIControl Callback
Can someone please help me?
2 comentarios
Sivakumaran Chandrasekaran
el 7 de En. de 2016
when i run this code, i get error on line no.28.. movegui command is not supporting structure it seems
Respuesta aceptada
Walter Roberson
el 7 de En. de 2016
Editada: Walter Roberson
el 7 de En. de 2016
function latitude_Callback(hObject,eventdata)
handles = guidata(hObject);
handles.latitude = get(hObject,'String');
display(handles.latitude);
guidata(hObject,handles)
end
function test_output_Callback(hObject,eventdata)
handles = guidata(hObject);
set(findobj('Tag','test_value'),'String', handles.latitude)
end
The fundamental problem you had is that handles is not automatically passed to functions by MATLAB. handles is a GUIDE construct, and GUIDE has to go through trouble to maintain it so that routines always get the current value.
You are using nested functions so you would have been better off avoiding the traditional handles, such as
function simple_gui_4
%define variables used in nested functions
lattitude_string = '';
%define figure and controls
f = figure('Visible','off','Position',[100,100,1000,500]);
hcity = uicontrol('Style','popupmenu',...
'String',{'Delhi','Mumbai','Visakhapatnam'},...
'Position',[150,475,100,25],...
'Callback',{@popup_menu_Callback});
hlatitude = uicontrol('Style','edit',...
'Position',[150,450,100,25],...
'Callback',{@latitude_Callback});
hlatitude_label = uicontrol('Style','edit',...
'String','Latitude',...
'Position',[50,450,100,25],...
'BackgroundColor',[1 1 1]);
htest_output = uicontrol('Style','edit',...
'String','test',...
'Tag','test_value',...
'Position',[150,50,100,25],...
'Callback',{@test_output_Callback});
% Assign a name to appear in the window title.
f.Name = 'Simple GUI';
% Move the window to the center of the screen.
movegui(f,'center')
% Make the UI visible.
f.Visible = 'on';
function latitude_Callback(hObject,eventdata)
%nested function
%set variable that was defined in outer function
latitude_string = get(hObject,'String');
disp(latitude_string);
end
function test_output_Callback(hObject,eventdata)
%nested function
%uses variables defined in outer function
set(htest_output,'String',latitude_string)
end
end
2 comentarios
Walter Roberson
el 7 de En. de 2016
It works for me once I change your f.Name and f.Visible references to the older syntax (I am using R2014a.) This is, incidentally, why Sivakumaran encountered the problem with movegui -- they must be using an older MATLAB.
set(f, 'Name', 'Simple GUI')
set(f, 'Visible', 'on')
If you are using R2014a or earlier then those changes need to be made, but for R2014b or later the syntax you used looks like it would work.
Más respuestas (1)
Stalin Samuel
el 7 de En. de 2016
Editada: Stalin Samuel
el 7 de En. de 2016
function simple_gui_4
f = figure('Visible','on','Position',[100,100,1000,500],'Name','Simple GUI');
set(f ,'Units','Pixels','Position',get(0,'ScreenSize'))
f.hcity = uicontrol('Style','popupmenu',...
'String',{'Delhi','Mumbai','Visakhapatnam'},...
'Position',[150,475,100,25],...
'Callback',{@popup_menu_Callback});
f.hlatitude = uicontrol('Style','edit',...
'Position',[150,450,100,25],...
'Callback',{@latitude_Callback});
f.hlatitude_label = uicontrol('Style','edit',...
'String','Latitude',...
'Position',[50,450,100,25],...
'BackgroundColor',[1 1 1]);
f.htest_output = uicontrol('Style','edit',...
'String','test',...
'Tag','test_value',...
'Position',[150,50,100,25],...
'Callback',{@test_output_Callback});
%
% Make the UI visible.
% f.Visible = 'on';
function latitude_Callback(hObject,eventdata,handles)
handles.latitude = get(hObject,'String');
display(handles.latitude);
guidata(hObject,handles)
end
function test_output_Callback(hObject,eventdata,handles)
set(findobj('Tag','test_value'),'String',handles.latitude)
end
function popup_menu_Callback(hObject,eventdata,handles)
msgbox('popup executed')%replace with your code
end
end
0 comentarios
Ver también
Categorías
Más información sobre Migrate GUIDE Apps en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!