Problem with variable not being global in creating GUI
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Sivakumaran Chandrasekaran
2016 年 1 月 7 日
when i run this code, i get error on line no.28.. movegui command is not supporting structure it seems
採用された回答
Walter Roberson
2016 年 1 月 7 日
編集済み: Walter Roberson
2016 年 1 月 7 日
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 件のコメント
Walter Roberson
2016 年 1 月 7 日
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.
その他の回答 (1 件)
Stalin Samuel
2016 年 1 月 7 日
編集済み: Stalin Samuel
2016 年 1 月 7 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Migrate GUIDE Apps についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!