MATLAB GUI с использованием GUIDE: проблема со списком - PullRequest
1 голос
/ 25 апреля 2009

Я создаю графический интерфейс MATLAB, который содержит два объекта uicontrol: кнопку и список. Я использую кнопку для добавления имен файлов в список. Когда я запускаю графический интерфейс из m-файла, он работает нормально. Проблема возникает только при запуске самого файла .fig. Вот код обратного вызова и ошибка:

function add_file_Callback(hObject, eventdata, handles)
% hObject    handle to add_file (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%gets input file(s) from user

[input_file,pathname] = uigetfile( ...
       {'*.jpg;*.tif;*.png;*.gif;*.bmp;*.pgm'}, ...
        'Select files', ... 
        'MultiSelect', 'on');

%if file selection is cancelled, pathname should be zero
%and nothing should happen
if pathname == 0
    return
end

%gets the current data file names inside the listbox

inputFileNames = get(handles.img_list,'String');

%if they only select one file, then the data will not be a cell
%if more than one file selected at once,
%then the data is stored inside a cell
if iscell(input_file) == 0

    %add the most recent data file selected to the cell containing
    %all the data file names
    inputFileNames{end+1} = input_file;

%else, data will be in cell format
else
    %stores full file path into inputFileNames
    for n = 1:length(input_file)
        %notice the use of {}, because we are dealing with a cell here!
        inputFileNames{end+1} = input_file{n};
    end
end

%updates the gui to display all filenames in the listbox
set(handles.img_list,'String',inputFileNames);

%make sure first file is always selected so it doesn't go out of range
%the GUI will break if this value is out of range
set(handles.img_list,'Value',1);

% Update handles structure
guidata(hObject, handles);

Ошибка:

Error in ==> Texture_Classification_GUI>add_file_Callback at 154
inputFileNames = get(handles.img_list,'String');

Error in ==> gui_mainfcn at 95
        feval(varargin{:});

Error in ==> Texture_Classification_GUI at 42
    gui_mainfcn(gui_State, varargin{:});

??? Error using ==> Texture_Classification_GUI('add_file_Callback',gcbo,[],guidata(gcbo))
Attempt to reference field of non-structure array.

??? Error while evaluating uicontrol Callback

Любая помощь будет высоко ценится.

Ответы [ 2 ]

5 голосов
/ 25 апреля 2009

Что вы подразумеваете под " запуском самого фигового файла "? GUIDE создает два файла: m-file и .fig (например, my_guide_app.m и my_guide_app.fig). Вы открываете .fig чем-то вроде openfig? Это не сработает, потому что m-file необходимо установить функцию открытия фигур, которая создает структуру ручки. Поэтому для запуска GUI, созданного с помощью GUIDE, необходимо вызвать m-file, чтобы запустить приложение, а не просто открыть файл .fig.

Дайте мне знать, если я неправильно истолковал ваше заявление об открытии файла .fig, потому что может быть что-то еще не так.

1 голос
/ 10 мая 2009

Список должен быть инициализирован в руководстве, я думаю. Если вы инициализируете его с 1 опцией, это будет массив символов, если вы инициализируете с более чем 1 опцией, это будет массив ячеек. Таким образом, вы должны поставить аналогичную проверку там (iscell); а затем добавьте новые параметры.

...