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

callback/ Variablen an Funktion übergeben und durchlaufen

 

Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2014, 17:13     Titel:
  Antworten mit Zitat      
ja, genau, es ist ein Textfeld. Mit str2num hatte ich es auch schon probiert, aber leider ohne erfolg. Und das leider auch nicht. Sad

Code:

function selektion_Callback(hObject, eventdata, handles)
% hObject    handle to selektion (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of selektion as text
%        str2double(get(hObject,'String')) returns contents of selektion as a double
handles.selektion=sscanf(get(handles.selektion, 'String'),'%f');
guidata(gcbo,handles);
 


Kann es sein, dass das Programm die Felder gar nicht aktualisiert? also, dass das Problem wo anders liegt? ich habe mir in der GUI.m einige Breakpoints gesetzt und da passiert gar nichts.
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 23.09.2014, 17:14     Titel:
  Antworten mit Zitat      
Lies bitte mal meinen letzten Post noch mal genauer Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2014, 17:17     Titel:
  Antworten mit Zitat      
grad gesehen Smile

Code:


function selektion_Callback(hObject, eventdata, handles)
% hObject    handle to selektion (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of selektion as text
%        str2double(get(hObject,'String')) returns contents of selektion as a double
handles.selektion1=sscanf(get(handles.selektion, 'String'),'%f');
guidata(gcbo,handles);
 


aber dies ist trotzdem nicht die Lösung.

Kann es sein, dass das Programm die Felder gar nicht aktualisiert? also, dass das Problem wo anders liegt? ich habe mir in der GUI.m einige Breakpoints gesetzt und da passiert gar nichts. Das Programm hält nicht an.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 23.09.2014, 17:22     Titel:
  Antworten mit Zitat      
Dann bitte mal noch den .fig file dazu. Sonst lässt es sich schlecht testen Wink

Edit: Wieso steht hier eigentlich ganz oben im m-file

Code:


aber der m-file heißt GUI_03.m? Das sollte schon gleich sein.

Hier rufts du eine Objekt "handles.edit1" auf das gar nicht existiert.

Code:

% --- Executes on button press in berechne.
function berechne_Callback(hObject, eventdata, handles)
% hObject    handle to berechne (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% handles=guidata(gcbo, handles);
result=genetic( handles.selektion1, handles.minimal, handles.maximal);

% was ist handles.edit1?
set(handles.edit1,'String',num2str(result));

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2014, 18:23     Titel:
  Antworten mit Zitat      
In dem handles.edit1 soll das Ergebnis erscheinen.

GUI_04.m
 Beschreibung:

Download
 Dateiname:  GUI_04.m
 Dateigröße:  6.27 KB
 Heruntergeladen:  356 mal
GUI_04.fig
 Beschreibung:

Download
 Dateiname:  GUI_04.fig
 Dateigröße:  2.58 KB
 Heruntergeladen:  332 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 23.09.2014, 18:59     Titel:
  Antworten mit Zitat      
Kann es sein das dir das Konzept der GUI im generellen nicht klar ist?

Ich nehme mal an es soll ein Eingabefeld für Iterationen (default=50) und ein Eingabefeld für selektion1 (default=0.5) geben? Die greifst aber auf die Felder zu, in denen die Beschreibung "Iterationen" und "Selektion1" steht anstatt dem jeweiligen Feld daneben.

Das große edit1 Feld ist nur für die Resultausgabe?

Du musst schon genau auf die Namen der Objekte achten, wenn du sie mit GUIDE erstellst. Es muss dann auch im code der exakte Name verwendet werden und der Name sollte auch nicht wieder als Variable zum Speichern in handles struct verwendet werden.

GUI_04.fig
 Beschreibung:

Download
 Dateiname:  GUI_04.fig
 Dateigröße:  2.67 KB
 Heruntergeladen:  333 mal
GUI_04.m
 Beschreibung:

Download
 Dateiname:  GUI_04.m
 Dateigröße:  6.23 KB
 Heruntergeladen:  346 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2014, 20:56     Titel:
  Antworten mit Zitat      
hm, also ich greife auf ein Feld doch mit

Code:
get(handles.tag_feldname,'Sting');


ich habe jetzt ein mini Beispiel gemacht und es klappt trotzdem nicht…

es kommt der folgende Fehler

Code:

>> gui_versuch2
Undefined function 'fix' for input arguments of type 'cell'.

Error in num2str (line 66)
        if ~isempty(x) && isequalwithequalnans(x, fix(x))

Error in gui_versuch2>pushbutton1_Callback (line 104)
erg=num2str(get(handles.edit1,'String'));

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in gui_versuch2 (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)gui_versuch2('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
 


wenn ich das str2num beim get weglasse, dann kommt der Fehler nicht.

gui_versuch2.fig
 Beschreibung:

Download
 Dateiname:  gui_versuch2.fig
 Dateigröße:  2.35 KB
 Heruntergeladen:  346 mal
gui_versuch2.m
 Beschreibung:

Download
 Dateiname:  gui_versuch2.m
 Dateigröße:  4.07 KB
 Heruntergeladen:  360 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 23.09.2014, 21:25     Titel:
  Antworten mit Zitat      
Du verwendet num2str anstatt str2num. Der Input ist aber schon ein string weshalb es eine Fehlermeldung gibt.

Code:
erg = str2num(get(handles.edit1,'String'));
set(handles.text1,'String',num2str(erg));


Nächstes Problem sind die Callback und Create function von edit1. Dies führt dazu, dass der Aufruf get(handles.edit1,'String') einen cell array zurück gibt, den aber str2num nicht verarbeiten kann. Ich habe Callback und Create function nun gelöscht und jetzt geht es. Warum in einen Fall ein cell und ohne genannte Funktionen ein char array zurückgegeben wird, kann ich dir auch nicht beantworten. Wobei das wohl nur etwas mit der Create function zu tun hat. Die callback funktion wird aufgerufen, so bald eine Interaktion mit dem Objekt, hier eine Eingabe erfolgt.

Ist die Eingabe in edit1 keine Zahl, ist erg = [] also empty. Deshalb immer schön die Eingabe prüfen Wink

gui_versuch2.m
 Beschreibung:

Download
 Dateiname:  gui_versuch2.m
 Dateigröße:  3.18 KB
 Heruntergeladen:  351 mal
gui_versuch2.fig
 Beschreibung:

Download
 Dateiname:  gui_versuch2.fig
 Dateigröße:  2.15 KB
 Heruntergeladen:  343 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2014, 09:33     Titel:
  Antworten mit Zitat      
Die Eingabedaten liest man in dem pushbutton callback ein, oder?
Kann man dann nicht die creat function und callback fct von allen(??) edit Fenstern löschen?

Ich habe jetzt verschiedene Werte bei der OpeningFcn definiert um zusehen was passiert

Code:
function GUI_02_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to GUI_02 (see VARARGIN)

% Choose default command line output for GUI_02
handles.output = hObject;

% Default Werte beim Starten der GUI setzen
handles.ord1 = 50
handles.selektion1 = 0.5
handles.mutat1 = 0.05
handles.iter1 = 100
handles.zahlen1 = 1

% Update handles structure
guidata(hObject, handles);

 


und dann kommt folgendes raus

Code:

handles =

           figure1: 173.0017
               zahlen: 12.0018
       text_zahlen: 11.0018
           fitness: 10.0018
             iter1: 9.0018
      iter_text: 8.0018
             mutat: 7.0018
          mutation: 6.0018
               pop: 5.0018
         selektion: 4.0018
    selektion: 3.0018
        order: 2.0018
          berechne: 1.0018
           listbox: 0.0018
      eingabedaten: 174.0017
            output: 173.0017
              ord11: 50
        selektion1: 0.5000
            mutat1: 0.0500
           iter1: 100
       zahlen1: 1  
 


ich habe gar kein figure und es werden Werte den textfeldern zugewiesen. Ich habe überprüft, dass ich nur die tags der edit Fenster benutze. Wo kommen die erste handles bis output her? und warum mit so komischen Werten?

Danke für deine Mühe!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.09.2014, 09:52     Titel:
  Antworten mit Zitat      
Die kommen von den Objekten, welche du in deiner GUI verwendest und mit GUIDE erstellt hast. Deshalb darfst du auch nicht die Namen doppelt verwenden, wenn du variablen im struct handles ablegst.

Zitat:

Die Eingabedaten liest man in dem pushbutton callback ein, oder?
Kann man dann nicht die creat function und callback fct von allen(??) edit Fenstern löschen?


Die create Funktion brauchst du sicherlich für die edit Felder nicht. Die callback funktion ist hingegen schon nützlich. Anstatt in den anderen Funktionen immer mit get() die Eingabe zu holen, speicherst du den Eingabewert in der callback funtion des edit Objekts im handle ab.

Code:
handles.eingabe_wert = get(...);


Vor dem Abspeichern sollte er natürlich noch auf seine Gültigkeit hin überprüft werden.

Der Vorteil ist folgender...

Statt get() wird die callback funktion nur bei einer Interaktion mit dem Feld aufgerufen. Wenn dort nichts passiert, reicht ja die abgespeicherte Variable der Eingabe im handle.
Du musst nicht jedes mal nach dem get() immer wieder die Eingabe überpüfen. Das passiert ja schon in der callback function. Es erspart dir Schreibarbeit, macht das debuggen einfacher und verbessert die Lesbarkeit/Übersichtlichkeit deines codes.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2014, 12:02     Titel:
  Antworten mit Zitat      
das heißt, nur wenn ich in dem edit Fenster etwas abändere, wird die callback funktion gestartet, wenn nicht dann, wird der initialisierungswert genommen.

Es läuft noch nicht zu 100% aber zumindest werden die Werte aus den edit-Fenstern ausgelesen Smile

Danke Dir schonmal vielmals!
Nikki
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.09.2014, 12:13     Titel:
  Antworten mit Zitat      
So lange du deine Variablen in der GUI OpeningFcn(...) schön initialisierst (wie in deinem Bsp vorletzter Post), ja.

Wird die callback function aufgerufen, überschreibst du dann deine Variable so fern die Eingabe gültig ist. Der neue Wert bleibt dann so lange, bis sie erneut aufgerufen wird oder du deine Variable an anderer Stelle änderst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3

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 - 2024 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.