Verfasst am: 14.07.2010, 16:29
Titel: Wie mache ich Callback befehle im GUI?
Hallo erst mal. Hab einige Fragen zum Thema GUI. Hab mich den ganzen Tag damit beschäfftigt, aber komm irgendwie nicht weiter. meinen bisherigen Code habe ich angehängt.
1. Wie kann ich eine vorher geschriebene Funktion beim Drücken der Taste "Thermografiebild laden" ausführen? Sie hat einen Input und einen Output und lautet B=Bildladen('C:\Users\Jörg'); Das Image I soll dann im haxes1 dargestellt werden.
2.Wie kann ich im GUI ein Feld für die Ausgabe von Strings anlegen?
Ist das richtig mit dem Ausdruck:
th = uitable(fh,'Units','normalized','Position',[.55 .10 .40 .10]);
Oder kann man damit nur Tabellen ausgeben?
Wenn ja, wie bekomme ich verschiedene Strings je nach Aktion in der Fläche ausgegeben?
3. Kann mir jemand den Sinn und die Anwendung von hObject und eventdata erklären. Und wofür brauch ich diese zwei Inputs?
function pushbutton1_Callback(hObject,eventdata)
Danke schonmal für die Mühe!!!!
Jörg
Code:
function GUI_Thermografiebild
%Über die grafische Benutzeroberfläche kann das Bild im ersten Schritt
%analysiert ("Analyse") werden und anschließend die Datenauswertung ("Start)
%gemacht werden.
%Initialisieren und platzieren des GUI
fh = figure('Name','Thermografieauswertung',...
'Position',[0,0,1300,700]);
zu der Sache mit den GUIs und ihren Callback gibts hier einige Tipps und Tutoriallinks. Auch ein Beispiel ohne Guide ist dabei. Ist eigentlich einfach zu finden (habe den Link grad nicht zur Hand).
Ansonsten:
Callbacks sind die lediglich Funktionen, die aufgerufen werden, wenn man das Objekt, zu dem sie gehören, benutzt. Sie werden bei den Eigenschaften via 'Callback' deklariert. Hast Du für einen auch gemacht.
Dabei müssen sie nicht Callback heißen, vereinfachen das Code-Lesen aber immens.
Ein textausgabe-Feld lässt sich als statisches Feld angeben. Listboxen haben mehr Platz.
Gefüllt wird es dadurch, dass dann, wenn es gefüllt werden soll, der Set-Befehl verwendet wird. Siehe eingebautes Beispiel.
Die Funktion Bildladen ist selbst geschrieben? Frage nur so, weil ich sie nicht weiter nutzen konnte.
Ich bin mir nicht sicher, was die NOtwendigkeit der Eigenschaft "Tag" angeht. Denn scheinbar geht es auch ohne. Ich habe diese immer vereinbart, sie muss oder sollte den gleichen Namen wie die SubStruktur haben (siehe Code), denn unter diesem wird sie später gefunden.
Desweiteren empfehle ich die Speicherung aller handles und andere Daten in der Struktur handles. In Kombination mit dem Befehl guidata(hObject, handles) ermöglicht das, in anderen Funtionen die Elemente von handles. vollständig zur Verfügung zu haben. Ansonsten gingen sie nach Beendigung der Funktion verloren weil gelöscht.
Ansonsten habe ich Deinen Code soweit gelassen, nur um die nötigen Funktionen erweitert, damit nicht immer ein Fehler kommt, weil mal ein Knopf gedrückt wird.
Ich würde allerdings die Eigenschaft Units gleich setzen. Für mich war es ein wenig Kauderwelsch, aber er funktioniert offenbar.
hObject und eventdata: sind m.E. notwendige, nicht sichtbare Variablen, die Matlab mit der Umgebung des Betriebssystems kommunizieren lassen. Also fleißig mitschreiben, dann klappts. Ich weiß es nicht besser.
Grüße,
yankemen
Code:
function GUI_Thermografiebild
%Über die grafische Benutzeroberfläche kann das Bild im ersten Schritt
%analysiert ("Analyse") werden und anschließend die Datenauswertung ("Start)
%gemacht werden.
%Initialisieren und platzieren des GUI
handles.fh = figure('Name','Thermografieauswertung',...
'Position',[0,0,1300,700]);
%Komponenten ändern ihre Größe mit der Fenstergröße
set([handles.fh,handles.pushbutton_hladen,handles.pushbutton_hanalyse,handles.pushbutton_hstart,handles.haxes1,handles.haxes2,handles.th, handles.text_ausgabe],'Units','normalized');
movegui(handles.fh,'center');
function pushbutton_hladen_Callback(hObject,eventdata)
handles.B=Bildladen('C:\Users\Jörg');
handles.I=imread(B);
set(handles.text_ausgabe,'String','bild');
imshow(handles.haxes1,handles.I);
%speichert alles neu hinzugekommene in der Struktur handles
guidata(hObject, handles);
end
function pushbutton_hanalyse_Callback(hObject, eventdata)
%was auch immer dann hier passieren soll
guidata(hObject, handles);
end
function lieschen_mueller(hObject, eventdata)
%code, der ausgeführt werden soll
guidata(hObject, handles);
end
Danke schonmal für die Antwort. Werd es heute noch ausprobieren.
MfG Jörg
Einstellungen und Berechtigungen
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.