2013-05-09 3 views
0

Я как бы новичок в MATLAB, и я делаю эксперименты для школьного проекта.Создание универсальных переменных в графическом интерфейсе MATLAB

Что я хочу - это графический интерфейс с тремя кнопками, когда вы нажимаете один из первых двух, он добавляет до одного на переменную (по одной переменной для каждой кнопки), а когда вы нажимаете третью кнопку, она делает что-то с переменными от первых двух кнопок.

Я использовал «руководство», а затем перетащил кнопки и затем изменил функции.

Но я понял, что мои переменные существуют только внутри функции для кнопки, поэтому, если я их инициализирую, они будут перезапускаться каждый раз, когда я нажимаю кнопку, а также нет способа, чтобы моя третья кнопка знала значение первого два.

Есть ли способ сделать эти переменные всегда присутствующими? Или передать их из функции в другую?

Мой код это просто автоматический код, созданный «guide», с v1 = v1 + 1; в первой функции обратного вызова кнопки и v2 = v2 + 1 во втором, а disp (v1) disp (v2) в третьем.

Я надеюсь, вы понимаете, что я имею в виду, я не носителем английского языка, так ...

Во всяком случае, спасибо большое, надеюсь, что это что-то легко исправить.

ответ

0

Ниже приведена не лучшая практика для сложных сложных программ, но для чего-то простого, как то, что вы пытаетесь сделать, похоже на то, что глобальные переменные были бы идеальными. Скажем, что X, Y и Z - это переменные, которые вы хотите разделить между функциями. Добавьте в начало каждой функции, которая их использует, и все они имеют доступ к тем же значениям.

global X Y Z 
2

У вас есть несколько вариантов:

  1. использование global переменных nhowe предложил.
    Но использование глобальных переменных не является хорошей практикой: см Top 10 MATLAB code practices that make me cry или Wikipedia article
  2. использование setappdata/getappdata функции для хранения переменных (это проще один)
  3. узнать, как использовать и правильно обновить handles структуру, которая появляется в каждой функции обратного вызова для элементов управления графическим интерфейсом, созданных в GUIDE (это сложнее).

Приводится пример файла * .m для случая №3. Большая часть кода, сгенерированного GUIDE, была удалена, показывая только вещи, связанные с вашими переменными. В принципе, вам нужно обновить структуру handles в каждой функции обратного вызова, которая вносит некоторые изменения в нее с помощью строки guidata(hObject, handles);. После этого все последующие обратные вызовы будут видеть обновленную структуру handles.

function varargout = GUIProgramWithVariables(varargin) 
    % Here goes some comment from GUIDE 
    % Begin initialization code - DO NOT EDIT 
    % . . .    actual code skipped 
    % End initialization code - DO NOT EDIT 

% --- Executes just before GUIProgramWithVariables is made visible. 
function GUIProgramWithVariables_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 GUIProgramWithVariables (see VARARGIN) 
    % Choose default command line output for GUIProgramWithVariables 
    handles.output = hObject; 
    % Here your code starts. It should be at the end of OpeningFcn 
    % Add your fields to handles structure 
    handles.C1 = 1; 
    handles.C2 = 2; 
    handles.C3 = 3; 
    % this updates modified handles structure 
    % so all subsequent call-backs will see the changes 
    guidata(hObject, handles); 

% --- Executes on button press in Button1 
function Button1_Callback(hObject, eventdata, handles) 
    % hObject handle to BrowseButton (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 
    % Here we do the magic with Button1 
    handles.C1 = handles.C1 + 1; 
    % this updates modified handles structure 
    % so all subsequent call-backs will see the changes 
    guidata(hObject, handles); 

% --- Executes on button press in Button2 
function Button1_Callback(hObject, eventdata, handles) 
    % hObject handle to BrowseButton (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 
    % Here we do the magic with Button2 
    handles.C2 = handles.C2 + 1; 
    % this updates modified handles structure 
    % so all subsequent call-backs will see the changes 
    guidata(hObject, handles); 

% --- Executes on button press in Button3 
function Button3_Callback(hObject, eventdata, handles) 
    % hObject handle to BrowseButton (see GCBO) 
    % eventdata reserved - to be defined in a future version of MATLAB 
    % handles structure with handles and user data (see GUIDATA) 
    % Here we do the magic with Button3 
    handles.C3 = handles.C1 + handles.C2; 
    % this updates modified handles structure 
    % so all subsequent call-backs will see the changes 
    guidata(hObject, handles); 
Смежные вопросы