Передача значений из переключателей в скрипт в Matlab
Итак, я создал графический интерфейс в руководстве, которое выглядит так:
графический интерфейс пользователя
Я хочу получить доступ к данным с помощью радиокнопки, а затем изменить переменные в моей симуляции (битрейт и модуляция - это группы кнопок, улучшение - это одна радиокнопка). Например - в симуляции у меня есть переменная Rs=1e9
, поэтому, когда выбрана кнопка 1 Гбит / с, я хочу, чтобы она оставалась 1e9, но если выбрана кнопка 10 Гбит / с, я хочу, чтобы она изменила свое значение на 10e9.
Затем после нажатия кнопки "Пуск" я хочу начать симуляцию (которая находится в другом файле.m) с заданными параметрами. Как мне это сделать? (Я знаю об идее ручек в Matlab, но я не знаю, как передать значение для моделирования)
Это код, который управляет графическим интерфейсом - генерируется руководством. Я добавил код, который запускает симуляцию и закрывает окно графического интерфейса.
function varargout = gui_final(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @gui_final_OpeningFcn, ...
'gui_OutputFcn', @gui_final_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 gui_final is made visible.
function gui_final_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 unrecognized PropertyName/PropertyValue pairs from the
% command line (see VARARGIN)
% Choose default command line output for gui_final
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes gui_final wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = gui_final_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 start.
function start_Callback(hObject, eventdata, handles)
% hObject handle to start (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clc
close all
message = sprintf('Wait - this is a very long simulation!\nClick the OK button and wait');
uiwait(msgbox(message));
evalin('base', 'simulation');
% --- Executes on button press in dfe.
function dfe_Callback(hObject, eventdata, handles)
% hObject handle to dfe (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of dfe
% --- Executes on button press in ook.
function ook_Callback(hObject, eventdata, handles)
% hObject handle to ook (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of ook
1 ответ
Вы можете сделать это, используя объект "hObject"
Например: предположим, что у вас есть ползунок, каждый раз, когда ползунок перемещается, вызывается обратный вызов. Вы можете использовать его для хранения переменной. Затем, когда вы нажимаете кнопку, вы хотите использовать эти данные для чего угодно. Код является:
function slider_callback(hObject,eventdata)
sval = hObject.Value;
diffMax = hObject.Max - sval;
data = struct('val',sval,'diffMax',diffMax);
hObject.UserData = data;
% For R2014a and earlier:
% sval = get(hObject,'Value');
% maxval = get(hObject,'Max');
% diffMax = maxval - sval;
% data = struct('val',sval,'diffMax',diffMax);
% set(hObject,'UserData',data);
end
function button_callback(hObject,eventdata)
h = findobj('Tag','slider1');
data = h.UserData;
% For R2014a and earlier:
% data = get(h,'UserData');
display([data.val data.diffMax]);
end
СПРАВКА: Matlab Docs
ОБНОВИТЬ
В вашем случае вы можете сделать это с другим подходом, если хотите. Когда вы нажимаете кнопку START, вы читаете состояние своих радиокнопок и передаете подходящее значение в функцию simulation_, которая, я полагаю, называется "имитация". В следующем примере я предполагаю, что у вас есть группа кнопок с именем (tag): uibuttongroup1, а внутри у вас есть две кнопки: radiobutton1 и radiobutton2
% --- Executes on button press in start.
function start_Callback(hObject, eventdata, handles)
% hObject handle to start (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Check which radio button is pressed
switch get(get(handles.uibuttongroup1,'SelectedObject'),'Tag')
case 'radiobutton1', myParameter = 1e9;
case 'radiobutton2', myParameter = 10e9;
end
%Execute simulation
clc
close all
message = sprintf('Wait - this is a very long simulation!\nClick the OK button and wait');
uiwait(msgbox(message));
evalin('base', 'simulation(myParameter)');