MATLAB GUI: Make a list of selection from a cell array containing string in popup menu

2 次查看(过去 30 天)
Hi All,
I want to make a GUI whick looks like below. After I imported the data from my workspace to GUI. I want to make a cell array(handles.StepName) containing step names into a list of selection under the select simulation step popup menu. but it didn't work and I got no idea how to do it.
another thing: I want to connect the input selection in the other popup menu (select surface) to the next popup. the first popup will select X_SB,Y_SB and Z_SB, if substrate bottom is selected in th first popup. later, the second popup(select simulation step) will specifiy matrix in struc handles.X_SB, handles.Y_SB and handles.Z_SB to be selected i.e. for step 1, following matrix will be choosen: handles.X_SB.Step1, handles.Y_SB.Step1 and handles.Z_SB.Step1.
can anyone guide me with this ?
thanks
function varargout = PlotSurfUI(varargin)
% PLOTSURFUI MATLAB code for PlotSurfUI.fig
% PLOTSURFUI, by itself, creates a new PLOTSURFUI or raises the existing
% singleton*.
%
% H = PLOTSURFUI returns the handle to a new PLOTSURFUI or the handle to
% the existing singleton*.
%
% PLOTSURFUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PLOTSURFUI.M with the given input arguments.
%
% PLOTSURFUI('Property','Value',...) creates a new PLOTSURFUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before PlotSurfUI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to PlotSurfUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help PlotSurfUI
% Last Modified by GUIDE v2.5 22-Jul-2021 16:35:49
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @PlotSurfUI_OpeningFcn, ...
'gui_OutputFcn', @PlotSurfUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before PlotSurfUI is made visible.
function PlotSurfUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to PlotSurfUI (see VARARGIN)
%get all X,Y, Z displacements for all surfaces
handles.X_SB = evalin('base', 'X_SB');
handles.Y_SB = evalin('base', 'Y_SB');
handles.Z_SB = evalin('base', 'Z_SB');
handles.X_DT = evalin('base', 'X_DT');
handles.Y_DT = evalin('base', 'Y_DT');
handles.Z_DT = evalin('base', 'Z_DT');
%plot initial surface SubBot before selection
X_Step = handles.X_SB.Step0; % get x displacement
Y_Step = handles.Y_SB.Step0; % get y displacement
Z_Step = handles.Z_SB.Step0; % get z displacement
xv = linspace(min(X_Step), max(X_Step), 50); %create 50 points from max and min in x displacements
yv = linspace(min(Y_Step), max(Y_Step), 50); %create 50 points from max and min in y displacements
[handles.X,handles.Y] = meshgrid(xv, yv); % create 2D meshgrid
F= scatteredInterpolant(X_Step, Y_Step, Z_Step); % find interpolant for available data
handles.Z = F(handles.X,handles.Y); %extrapolate and interpolate new z coordinates based on interpolant F and X,Y coordinates
surf(handles.X, handles.Y, handles.Z); %plot original surface of SubBot at Step0
% get step names available
handles.StepName = evalin('base', 'C_name{1,1}');
% Choose default command line output for PlotSurfUI
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes PlotSurfUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = PlotSurfUI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbuttonPlot.
function pushbuttonPlot_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonPlot (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% axes(handles.axes1);
% cla;
%
% popup_sel_index = get(handles.popupmenu_Surface, 'Value');
% switch popup_sel_index
% case 1
% plot(rand(5));
% case 2
% plot(sin(1:0.01:25.99));
% case 3
% bar(1:.5:10);
% case 4
% plot(membrane);
% case 5
% surf(peaks);
% end
surf(handles.X, handles.Y, handles.Z);
% --------------------------------------------------------------------
function FileMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function OpenMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to OpenMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
file = uigetfile('*.fig');
if ~isequal(file, 0)
open(file);
end
% --------------------------------------------------------------------
function PrintMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to PrintMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
printdlg(handles.figure1)
% --------------------------------------------------------------------
function CloseMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to CloseMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],...
['Close ' get(handles.figure1,'Name') '...'],...
'Yes','No','Yes');
if strcmp(selection,'No')
return;
end
delete(handles.figure1)
% --- Executes on selection change in popupmenu_Surface.
function popupmenu_Surface_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_Surface (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns popupmenu_Surface contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu_Surface
str = get(hObject, 'String');
val = get(hObject, 'Value');
switch str(val)
case 'Substrate Bottom'
handles.surface == 1;
case 'Die Top'
handles.surface == 2;
end
%save handles structure again
guidata(hObject.handles)
%--- Executes during object creation, after setting all properties.
function popupmenu_Surface_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu_Surface (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
set(hObject, 'String', {'Substrate Bottom', 'Die Top'});
% --- Executes on selection change in popupmenu_Step.
function popupmenu_Step_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu_Step (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu_Step contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu_Step
% --- Executes during object creation, after setting all properties.
function popupmenu_Step_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu_Step (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
StepList = get(handles.StepName, 'String');
set(hObject, 'String', StepList);
% --------------------------------------------------------------------
function uitoggletool4_ClickedCallback(hObject, eventdata, handles)
% hObject handle to uitoggletool4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
  5 个评论
Abdul Rasyid Haron
Abdul Rasyid Haron 2021-7-26
As you suggested, I made the GUI using codes like below. But, I got error message 'Invalid use of operator'. I can't find any operator issue here.
can you have a look at my code and help me?
%% User Interface to plot warpage surface
hObject = figure('Name', 'Warpage Surface Plot', ...
'Position', [300 100 955 559]) % create a figure to house the GUI
handles = guidata(hObject); % update handles
guidata(hObject,handles);
%------ create components of the GUI ------------
% create plot area object
handles.ax1 = axes('Position', [0.07 0.1 0.6 0.8]);
% create push button to select surface
handles.popupmenu1 = uicontrol(...
'Parent', hObject,...
'Style','popupmenu',...
'Unit', 'Normalized',...
'Position',[0.726 0.809 0.25 0.063],...
'String',{'Substrate Bottom', 'Die Top'}...
);
handles.popupmenu1_label = uicontrol(...
'Parent', hObject,...
'Style', 'text',...
'Unit', 'Normalized',...
'Position', [0.71 0.88 0.12 0.027],...
'String', {'Select a surface:'}...
);
handles.listbox = uicontrol(...
'Parent', hObject,...
'Style', 'listbox',...
'Unit', 'Normalized',...
'Position', [0.726 0.2 0.25 0.55],...
'String', C_name{1, 1}...
);
handles.listbox_label = uicontrol(...
'Parent', hObject,...
'Style', 'text',...
'Unit', 'Normalized',...
'Position', [0.7 0.75 0.12 0.027],...
'String', 'Select a step:'...
);
handles.pushbutton = uicontrol(...
'Parent', hObject,...
'Style', 'pushbutton',...
'Unit', 'Normalized',...
'Position', [0.75 0.1 0.15 0.063],...
'String', 'Plot surface',....
'FontSize', 11,....
'Callback', {@plotSurface, handles.popupmenu1, handles.listbox}...
);
% -----create function to plot surface from String selected in popupmenu and listbox ---------
function plotSurface(hObject, eventdata, handles.popupmenu1, handles.listbox)
selectedSurface = get(handles.popupmenu1, 'String');
selectedStep = get(handles.listbox, 'String');
%select which data table to choose
if (selectedSurface == 'Substrate Bottom')
data = SubBotdata;
else
data = DieTopdata;
end
% select X,Y and Z from the data table
switch selectedStep
case 'REMOVE_SEALANT_STIM'
X = data(:,4); % get x displacement
Y = data(:,5); % get y displacement
Z = data(:,6); % get z displacement
case 'COOL-TO-25C'
X = data(:,7); % get x displacement
Y = data(:,8); % get y displacement
Z = data(:,9); % get z displacement
case 'Contact'
X = data(:,10); % get x displacement
Y = data(:,11); % get y displacement
Z = data(:,12); % get z displacement
case 'ON_VACUUM'
X = data(:,13); % get x displacement
Y = data(:,14); % get y displacement
Z = data(:,15); % get z displacement
case 'ACTIVATE_LID_TIM'
X = data(:,16); % get x displacement
Y = data(:,17); % get y displacement
Z = data(:,18); % get z displacement
case 'TGB_CONTACT'
X = data(:,19); % get x displacement
Y = data(:,20); % get y displacement
Z = data(:,21); % get z displacement
case 'APPLY_TGB_LOAD'
X = data(:,22); % get x displacement
Y = data(:,23); % get y displacement
Z = data(:,24); % get z displacement
case 'HEAT-TO-148C'
X = data(:,25); % get x displacement
Y = data(:,26); % get y displacement
Z = data(:,27); % get z displacement
case 'ACTIVATE-SEALANT'
X = data(:,28); % get x displacement
Y = data(:,29); % get y displacement
Z = data(:,30); % get z displacement
case 'REMOVE-LOAD'
X = data(:,31); % get x displacement
Y = data(:,32); % get y displacement
Z = data(:,33); % get z displacement
case 'COOL_TO_25C'
X = data(:,34); % get x displacement
Y = data(:,35); % get y displacement
Z = data(:,36); % get z displacement
case 'HEAT-TO-156C'
X = data(:,37); % get x displacement
Y = data(:,38); % get y displacement
Z = data(:,39); % get z displacement
case 'STIM-MELT_REMOVE'
X = data(:,40); % get x displacement
Y = data(:,41); % get y displacement
Z = data(:,42); % get z displacement
case 'HEAT-TO-175C'
X = data(:,43); % get x displacement
Y = data(:,44); % get y displacement
Z = data(:,45); % get z displacement
case 'COOL-TO-156C'
X = data(:,46); % get x displacement
Y = data(:,47); % get y displacement
Z = data(:,48); % get z displacement
case 'ADD-STIM'
X = data(:,49); % get x displacement
Y = data(:,50); % get y displacement
Z = data(:,51); % get z displacement
case 'STIM_SOLIDIFY'
X = data(:,52); % get x displacement
Y = data(:,53); % get y displacement
Z = data(:,54); % get z displacement
case 'COOL-TO-ROOMTEMP25'
X = data(:,55); % get x displacement
Y = data(:,56); % get y displacement
Z = data(:,57); % get z displacement
case 'HEAT-TO-156C_POSTBLUM'
X = data(:,58); % get x displacement
Y = data(:,59); % get y displacement
Z = data(:,60); % get z displacement
case 'SolderMeltat156C'
X = data(:,61); % get x displacement
Y = data(:,62); % get y displacement
Z = data(:,63); % get z displacement
case 'SolderMeltat180'
X = data(:,64); % get x displacement
Y = data(:,65); % get y displacement
Z = data(:,66); % get z displacement
end
% Plot the surface
xv = linspace(min(X), max(X), 50);
yv = linspace(min(Y), max(Y), 50);
[handles.X, handles.Y] = meshgrid(xv,yv);
F = scatteredInterpolant(X,Y,Z);
handles.Z =F(handles.X, handles.Y);
surf(handles.X, handles.Y, handles.Z);
end
Rik
Rik 2021-7-26
You can't define inputs as fields of a struct. You're better off dynamically loading the data on callback:
function plotSurface(hObject, eventdata)
%this will load handles.popupmenu1 and handles.listbox
handles=guidata(hObject);

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

标签

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by