WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Wie mache ich Callback befehle im GUI?

 

Snowdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2010, 16:29     Titel: Wie mache ich Callback befehle im GUI?
  Antworten mit Zitat      
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]);


%Komponenten konstruieren und positionieren
hladen = uicontrol(fh,'Style','pushbutton',...
    'String','Thermografiebild laden','Position',[1000,600,130,50],...
    'Callback',@pushbutton1_Callback);
hanalyse = uicontrol(fh,'Style','pushbutton',...
    'String','Analyse','Position',[1000,530,130,50]);
hstart = uicontrol(fh,'Style','pushbutton',...
    'String','Start','Position',[1000,460,130,50]);
haxes1 = axes('parent',fh,'Position',[.02 .03 .50 .95]);
haxes2 = axes('parent',fh,'Position',[.70 .35 .20 .20]);
th = uitable(fh,'Units','normalized','Position',[.55 .10 .40 .10]);

%Komponenten ändern ihre Größe mit der Fenstergröße
set([fh,hladen,hanalyse,hstart,haxes1,haxes2,th],'Units','normalized');
movegui(fh,'center');

    function pushbutton1_Callback(hObject,eventdata)
    B=Bildladen('C:\Users\Jörg');
    I=imread(B);
    imshow(haxes1,I);
    end

end
 
Private Nachricht senden Benutzer-Profile anzeigen


yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 15.07.2010, 15:07     Titel:
  Antworten mit Zitat      
Moin Snowdog,

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 konstruieren und positionieren
handles.pushbutton_hladen = uicontrol(handles.fh,'Style','pushbutton',...
    'Tag','pushbutton_hladen',...
    'String','Thermografiebild laden','Position',[1000,600,130,50],...
    'Callback',@pushbutton_hladen_Callback);
handles.pushbutton_hanalyse = uicontrol(handles.fh,'Style','pushbutton',...
    'Tag','pushbutton_hanalyse',...
    'String','Analyse','Position',[1000,530,130,50],...
    'Callback',@pushbutton_hanalyse_Callback);
handles.pushbutton_hstart = uicontrol(handles.fh,'Style','pushbutton',...
    'Tag','pushbutton_hstart',...
    'String','Start','Position',[1000,460,130,50],...
    'Callback',@lieschen_mueller);
handles.haxes1 = axes('parent',handles.fh,'Position',[.02 .03 .50 .95]);
handles.haxes2 = axes('parent',handles.fh,'Position',[.70 .35 .20 .20]);
handles.th = uitable(handles.fh,'Units','normalized','Position',[.55 .10 .40 .10]);
handles.text_ausgabe = uicontrol('parent',handles.fh,...
                        'Tag','text_ausgabe',...
                        'Style','text',...
                        'String','text_ausgabe',...
                        'Units','normalized',...
                        'Position',[.65 .75 .10 .10]);

%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

end
 
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2010, 07:50     Titel:
  Antworten mit Zitat      
Danke schonmal für die Antwort. Werd es heute noch ausprobieren.

MfG Jörg
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.