Problem while creating a gui and to share variables via assignin
3 views (last 30 days)
Show older comments
Johannes Liebrich
on 21 Feb 2020
Commented: Johannes Liebrich
on 22 Feb 2020
Hello,
I just created a gui where I'm facing a problem. Let me explain it briefly.
First, the Import button is pressed. Then a csv is read in. So that I have the imported data available in the workspace, I transfer it in the callback function with assignin to the workspace.
The variables can also be found in the workspace. Unfortunately I cannot pass them to other functions. In the appendix I have added a short minimal example in which the problem can be reproduced.
Thanks a lot for your help
clear all
fig = uifigure;
fig.Position(3:4) = [600 320];
ax = uiaxes('Parent',fig,...
'Units','pixels',...
'Position',[10 10 300 280]);
btn = uibutton(fig,...
'push',...
'Position',[400,215, 100, 22],...
'Text','Plot',...
'BackgroundColor',[0.3010 0.7450 0.20],...
'ButtonPushedFcn', @(btn,event)...
plotButtonPushed(btn,ax,...
variable_1));
% when this button is pressed, this function should get the created
% variable from the callback function
import = uibutton(fig,...
'push',...
'Position',[100,290, 100, 22],...
'Text','Import',...
'BackgroundColor',[0 0.8 0.6],...
'ButtonPushedFcn', @(btn,event) plotButtonImport(fig));
function plotButtonImport(fig)
assignin('base','variable_1',10)
% Here I create a variable and give it to the base workspace
end
function plotButtonPushed(btn,ax,value)
k=k+1;
end
0 Comments
Accepted Answer
Spencer Chen
on 21 Feb 2020
What do you mean by "pass them to other functions"? Do you mean access of variable_1 by plotButtonPushed()?
When you set the callback for plotButtonPushed(), you specified that it takes the input argument variable_1. This means that it will execute the callback with the value of variable_1 at the time that you called uibutton, not the latest value in variable_1.
To solve this issue, you can use evalin() in plotButtonPushed() to get the latest value from variable_1 from your base workspace.
But personally, it's cleaner if you can avoid putting stuff in the base workspace unless you really have to; i.e. at some stage, the base workspace needs to use that variable.
For a better programming practice, I would suggest storing variable_1 is one of the UserData fields of your GUI components, to be shared by other component. For example:
function plotButtonImport(fig)
fig.UserData = 1;
end
function plotButtonPushed(btn,ax,value)
btn.Parent.UserData = btn.Parent.UserData + 1;
end
Blessings,
Spencer
More Answers (0)
See Also
Categories
Find more on Develop uifigure-Based Apps in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!