Вот какой простой код, который я думаю, делает то, что вы хотите. Я создал «программный» графический интерфейс для демонстрации, но его легко реализовать в коде GUIDE. В частности, посмотрите на CalculateCallback
, который является обратным вызовом, выполняемым, когда пользователь нажимает кнопку, используемую для «вычисления». Здесь нет вычислений/манипуляции данными как таковой, код принимает только пользовательские входы из текстовых полей и обновляет матрицу со значениями. Существует также счетчик для отслеживания количества вычислений.
Код прокомментирован. Si должно быть легко следовать. Если нет, просьба уточнить!
function CalculateGUI
clear
clc
close all
%// Create figure and uielements
handles.fig = figure('Position',[440 500 500 150]);
handles.CalcButton = uicontrol('Style','Pushbutton','Position',[60 70 80 40],'String','Calculate','Callback',@CalculateCallback);
handles.Val1Text = uicontrol('Style','Text','Position',[150 100 60 20],'String','Value 1');
handles.Val1Edit = uicontrol('Style','Edit','Position',[150 70 60 20],'String','');
handles.Val2Text = uicontrol('Style','Text','Position',[220 100 60 20],'String','Value 2');
handles.Val2Edit = uicontrol('Style','Edit','Position',[220 70 60 20],'String','');
handles.MatrixText = uicontrol('Style','Text','Position',[290 125 100 20],'String','Value 1 Value 2');
handles.MatrixEdit = uicontrol('Style','Text','Position',[300 25 80 100]);
handles.CounterText1 = uicontrol('Style','Text','Position',[40 20 80 20],'String','Loop counter');
handles.CounterText2 = uicontrol('Style','Text','Position',[130 20 80 20],'String','');
%// Initialize counter to get # of values calculated
handles.CalculateCounter = 0;
handles.MatrixValues = zeros(1,2);
guidata(handles.fig,handles); %// Save handles structure of GUI. IMPORTANT
function CalculateCallback(~,~)
%// Retrieve elements from handles structure.
handles = guidata(handles.fig);
%// Get entries in text boxes. Assumes inputs are numbers.
Val1 = str2double(get(handles.Val1Edit,'String'));
Val2 = str2double(get(handles.Val2Edit,'String'));
%// If 1st calculation, initialize the matrix containing the
%// values. Otherwise, concatenate current values with existing matrix.
if handles.CalculateCounter == 0
handles.MatrixValues = [Val1,Val2];
else
handles.MatrixValues = [handles.MatrixValues; Val1,Val2];
end
%// Print matrix values in text box.
set(handles.MatrixEdit,'String',num2str(handles.MatrixValues));
%// Update counter and display current value in GUI.
handles.CalculateCounter = handles.CalculateCounter + 1;
set(handles.CounterText2,'String',num2str(handles.CalculateCounter))
guidata(handles.fig,handles); %// Save handles structure of GUI.
end
end
Вот скриншот GUI после некоторых вычислений:
После того, как вы закончите вы можете получить данные из handles.MatrixValues
и делать все, что вы хотите с ними. Надеюсь, что поможет вам начать работу!
Ваш гий создан с помощью гида? – patrik
Да, он создан с помощью гида – Aerodynamicist
Хорошо, я понимаю, что я имею в виду, если он был создан с помощью GUIDE, но, я думаю, вы поняли. Во всяком случае, вам нужно написать то, что вы хотите сделать внутри функции обратного вызова, которая создается вместе с кнопкой. Данные могут передаваться вместе с функцией, используя (я думаю) 3-й аргумент [ссылка на документацию] (http://se.mathworks.com/help/matlab/creating_guis/write-callbacks-using-the- гид-workflow.html) – patrik