2009-04-25 13 views
1

Ich erstelle eine MATLAB GUI, die zwei uicontrol-Objekte enthält: eine Drucktaste und eine Listbox. Ich benutze die Drucktaste, um der Listbox Dateinamen hinzuzufügen. Wenn ich die GUI von der m-Datei starte, funktioniert es gut. Das Problem tritt nur auf, wenn ich die .fig-Datei selbst ausführe. Hier ist der Rückruf-Code und der Fehler:MATLAB GUI mit GUIDE: Listenfeld Ausgabe

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); 

Fehler:

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 

Jede Hilfe wäre sehr willkommen.

+0

Add on: was ich denke ist, dass die List Box vor der Verwendung initialisiert werden muss, aber ich weiß nicht wie. –

Antwort

5

Was meinen Sie mit "läuft die fig-Datei selbst"? GUIDE erstellt zwei Dateien: eine m-file und eine .fig Datei (zum Beispiel my_guide_app.m und my_guide_app.fig). Öffnen Sie die .fig mit etwas wie openfig? Dies wird nicht funktionieren, da die m-file die Funktion zum Öffnen von Zahlen festlegen muss, die die Handle-Struktur erstellt. Um GUIs laufen zu lassen, die mit GUIDE erstellt wurden, ist es notwendig, die m-file aufzurufen, um die Anwendung zu starten und nicht nur die Datei .fig zu öffnen.

Lassen Sie mich wissen, wenn ich Ihre Aussage über das Öffnen der .fig Datei falsch interpretiert, weil es etwas anderes falsch sein könnte.

1

Listbox muss im GUIDE initialisiert werden, denke ich. Wenn Sie es mit 1 Option initialisieren, wird es ein Char-Array sein, wenn Sie es mit mehr als 1 Option initialisieren, wird es ein Zellen-Array sein. Also, Sie müssen einen ähnlichen Check dort auch (iscell) stellen; und dann fügen Sie die neuen Optionen hinzu.