Переменная, совместно используемая обратными вызовами для графического интерфейса, созданного с помощью руководства Matlabs - PullRequest
3 голосов
/ 16 апреля 2011

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

Я пытаюсь построить графический интерфейс, используя matlab 'guide', и все, что я хочу, это загрузить изображение в оси, и я хочу сохранить его в какой-нибудь глобальнойпеременная, которая будет использоваться всеми обратными вызовами в моем GUI, таким образом, я мог бы обработать это изображение на других обработчиках событий.

У меня проблемы с поиском способа сделать это, я пытался объявить некоторые переменные как «глобальные», но это не сработало.Можете ли вы объяснить мне, как это работает, или показать краткий пример.Спасибо

1 Ответ

3 голосов
/ 16 апреля 2011

Вот рабочий пример (с использованием GUIDE), который делает то, что вы ищете, двумя различными способами.В целом, я предпочитаю использовать метод «ручек» для 90% моих графических интерфейсов.Единственный раз, когда я буду использовать глобал, это когда мне понадобится доступ к данным за пределами GUI.

Обратите внимание, что я добавил 'handles.img = 0' внутри функции открытия.В качестве отказа от ответственности, нет проверки данных из обзора.Я также проверил это только с помощью файла .gif и не подумал, как лучше всего отобразить изображение на осях.Просто быстро и грязно:)

РЕДАКТИРОВАТЬ: Когда вы копируете и вставляете эти данные в M-файл.Обязательно назовите его picture_loader.m.Matlab сделал со мной несколько глупостей с неправильными именами файлов:)

Надеюсь, это поможет.

function varargout = picture_loader(varargin)
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @picture_loader_OpeningFcn, ...
                       'gui_OutputFcn',  @picture_loader_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 picture_loader is made visible.
function picture_loader_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;
    handles.img = 0;  % Add the img data to the handle
    guidata(hObject, handles);


% --- Outputs from this function are returned to the command line.
function varargout = picture_loader_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output;


% --- Executes on button press in Browse.
function Browse_Callback(hObject, eventdata, handles)
    global img % Store the data global
    img_path = uigetfile('*.gif'); % browse for a file
    img = importdata(img_path); % Load the image data
    handles.img = img; % Store the img data in the handles struct 
    guidata(hObject, handles);  % Save handles so all call backs have the updated data

    % Plot the data in the axes1
    axes(handles.axes1) % Select axes1 to write to
    image(img.cdata) % Display the image
    colormap(img.colormap) % Apply proper colormap

% --- Executes on button press in load_global.
function load_global_Callback(hObject, eventdata, handles)
    global img
    if isstruct(img)
        axes(handles.axes1)  %Select the axes1 on the gui
        image(img.cdata)
        colormap(img.colormap)
    end

% --- Executes on button press in load_global_handle.
function load_handle_Callback(hObject, eventdata, handles)
    if isstruct(handles.img)
        axes(handles.axes1)  %Select the axes1 on the gui
        image(handles.img.cdata)
        colormap(handles.img.colormap)
    end

% --- Executes on button press in clear.
function clear_Callback(hObject, eventdata, handles)
    cla(handles.axes1)
...