Verfasst am: 08.07.2009, 18:36
Titel: global struct in GUI
Hallo, ich habe folgendes Problem. Ich habe eine GUI, dabei erstelle ich einen struct, der die handles der axes, pushbuttons etc. enthält:
"my_handles=guihandles"
Die GUI besteht aus mehreren M-Files, die zusammenarbeiten. Sie benötigen zum Funktionieren (eigentlich) nur den my_handles struct. Solange es Skript M-Files sind tut alles, ich will aber Function M-Files (zwecks Kompilieren).
Vielleicht checke ich es nicht, aber eigentlich müsste ich doch dann in jeder dieser Funktionen my_handles als global definieren, oder? Also
"function my_fun1
global my_handles"
Wenn ich das mache, dann bekomme ich plötzlich die Fehlermeldung:
??? Attempt to reference field of non-structure array
Hhm, das klappt leider nicht so ganz. my_handles wird in einer hauptfunction main_fun definiert. Aus dieser rufe ich dann mittels pushbutton my_fun1 au, also:
Es gibt also eine
Hi, ja sorry, stimmt, das ist besser mit dem Code. Also das klappt leider nicht. Da my_handles ja die GUIhandles sind, werden die am Ende der Hauptfunktion definiert. Wenn ich sie dann vorher schon in einem Callback verwende meldet Matlab bereits beim starten der GUI (also beim Aufruf von Mainfun)
Moment, ich hab da was vergessen:
Die GUI-Handles-Struktur wird automatisch an die Callbacks übergeben. du musst nur bei der Definition der Callback diese auch als Übergabeparameter definieren:
kannst du mal ein Beispiel posten? Also ein Figure mit Button und dann eine Funktion dazu die nach dem Button-Klick etwas ausführen soll und wo diese Fehlermeldung kommt. Ich denke dann gehts am schnellsten...
@LittleX: Ich baue das Teil selbst, verwende also nicht guide.
@Alex: Also im Prinzip will ich das so machen:
Code:
function main_fun
f=figure;
pb=uicontrol('Tag','pb','Parent',f,'Style','pushbutton','Position',[2001003030],'String','GO!!!','Callback',@my_fun1);
pa=uipanel('Tag','pa','Parent',f,'Position',[0.480.020.5 .95],'BackgroundColor','red'); %Erstelle eine rote Panel
my_handles=guihandles;
end
Wenn Du guide nicht verwendest, musst Du Deine selber erzeugte handle Struktur mit übergeben und den Callback entsprechend definieren (in Deinem Bespiel gibst Du nur @my_fun1 an, also keinen zusätzlichen Parameter):
Ich würde Dir aber wie Alex auch empfehlen, Dir mal setappdata/getappdata oder guidata zum Datenaustausch empfehlen.
Oder nested functions verwenden, dann hast Du direkt Zugriff auf Deine handles.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.