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

Wert einer Variablen über Pushbutton ändern

 

Slamdunker23
Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 19.06.2015, 10:25     Titel: Wert einer Variablen über Pushbutton ändern
  Antworten mit Zitat      
Hallo zusammen.

Ich starte ein Skript über einen Pushbutton. Es werden dauerhaft Werte eingelesen, solange bis ich Pushbutton2 drücke.
Das funktioniert alles wunderbar.

Nun möchte ich wenn ich den Pushbutton drücke eine Variable anlegen und den Wert der Variablen beim Drücken des Pushbutton2 ändern.

Das funktioniert bis jetzt so:

Code:

function pushbutton_Callback(hObject, eventdata, handles)
handles.Flag_Programm_Exit = false;
guidata(hObject,handles);
 


Im zweiten Pushbutton habe ich folgendes programmiert:

Code:

function pushbutton2_Callback(hObject, eventdata, handles)
handles.Flag_Programm_Exit = true;
guidata(hObject,handles);
 


Das funktioniert auch soweit. Wenn ich das Skript im Pushbutton2 debugge, dann wird der Wert tatsächlich geändert. Perfekt!
Nachdem das Skript des Pushbutton2 beendet ist, springt es wieder in das Skript von Pushbutton1 und liest die Handles ein.

Nun ist die Änderung des Wertes aber nicht mehr da.

Was mache ich falsch?

Vielen Dank für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.06.2015, 10:32     Titel:
  Antworten mit Zitat      
Hallo,

füge doch noch ein
Code:

nach dem guidata-Befehl ein.

Falls das nicht hilft, bitte ein reproduzierbares Beispiel zur Verfügung stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 22.06.2015, 08:11     Titel:
  Antworten mit Zitat      
Guten Morgen.

Ich habe exemplarisch eine GUI erstellt.
Diese enthält drei Buttons: Start, Stop und Stop und Exit.

Mit Start wird eine Variable mit der Frequenz 0,5 Hz hochgezählt. Mit Stop wird die Aktion beendet.

Mit Stop und Exit möchte ich eine Flag setzen, die mir das Fenster schließt.
Genau dieses Setzen der Flag_Exit = true wird nicht übernommen.

Vielen Dank für eure Hilfe.

Herzlicher Gruß!

GUI_Beispiel.fig
 Beschreibung:

Download
 Dateiname:  GUI_Beispiel.fig
 Dateigröße:  4.33 KB
 Heruntergeladen:  384 mal
GUI_Beispiel.m
 Beschreibung:

Download
 Dateiname:  GUI_Beispiel.m
 Dateigröße:  4.11 KB
 Heruntergeladen:  361 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.06.2015, 14:19     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist, dass sich die Informationen während der Ausführung des Callbacks ändern, ohne dass der Callback des Start-Buttons das mitbekommt. handles ist dort ja eine lokale Variable.

Abhilfe:
Vor der if-Abfrage folgende Zeile einfügen:
Code:
handles = guidata(hObject);


Das drawnow ist nicht mal nötig, da pause auch aktualisiert.
(Du brauchst also im echten Code pause oder drawnow)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.06.2015, 11:39     Titel: Re: Wert einer Variablen über Pushbutton ändern
  Antworten mit Zitat      
Hallo Slamdunker23,

Das Problem wurde bereits erklärt. Hier noch mal mit anderen Worten:

Code:
function pushbutton2_Callback(hObject, eventdata, handles)

Nach dieser Zeile hat der "handles"-Struct den Wert, den er bei der Erstellung des Callbacks hatte. Die zwischenzeitlichen Änderungen an diesem Struct werden nicht im Nachhinein in den Callback-Aufruf hinein kopiert. Deshalb braucht man noch die aktuelle Version dieses Structs:
Code:
function pushbutton2_Callback(hObject, eventdata, handles)
handles = guidata(hObject);

An dieser Stelle wird offensichtlich, dass "handles" im Aufruf eigentlich gar nicht benötigt wird und nur in die Irre führt. Wieso GUIDE dies trotzdem automatisch überall einfügt bleibt mir ein Rätsel. Ich halte das für eine ernste Fehl-Entscheidung, die zu sehr vielen Nachfragen in Matlab-Foren führt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.06.2015, 17:40     Titel:
  Antworten mit Zitat      
Hallo Jan,

hast du dir mal den App Designer angeschaut? Da gibt es einen Tech Preview, allerdings ausschließlich für R2014b.
http://www.mathworks.com/matlabcent.....change/48142-app-designer

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Slamdunker23
Themenstarter

Forum-Century

Forum-Century


Beiträge: 101
Anmeldedatum: 03.11.09
Wohnort: Stuttgart
Version: R2012b
     Beitrag Verfasst am: 25.06.2015, 08:25     Titel:
  Antworten mit Zitat      
Vielen Dank euch beiden.
Der Code funktioniert natürlich jetzt!

Und was noch viel wichtiger ist: Ich habe es verstanden.

Vielen Dank und herzlicher Gruß!
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 - 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.