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

Variablenübergabe bei Callback funktioniert nicht

 

donjuan_B
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 22.01.15
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 31.01.2016, 01:28     Titel: Variablenübergabe bei Callback funktioniert nicht
  Antworten mit Zitat      
Hallo liebe Community,

ich habe nach dem Beispiel in der Matlab-Hilfe versucht in einer simplen Gui Daten zwischen einzelnen Callbacks zu übergeben. Leider funktioniert es bei mir nicht. Über eure schnellstmögliche Hilfe wäre ich sehr dankbar.

Code:


function my_gui()
handles.figure1 = figure;
set(handles.figure1,'Units','normalized',...
    'Position', [.2, .2, .7, .7]);

handles.ButtonNode = uicontrol('Style','pushbutton',...
                               'Units','normalized',...
                               'Parent',handles.figure1,...
                               'String','Node',...
                               'Position',[.05 .8 .1 .1],...
                               'Visible','on',...
                               'Callback',@ButtonNode_Callback);
% Choose default command line output for choose_node


data = struct('Excel',0,'XML',2);

function ButtonNode_Callback(hObject,eventdata)

Textfeldbreite = .05;

handles.figure_choose_nodes = figure('Units','normalized','Position', [.1, .1, .7, .7],'Tag','figure_choose_nodes');

handles.Popup_Nodes = uicontrol('Style','popup',...
                                'Units','normalized',...
                                'Parent',handles.figure_choose_nodes,...
                                'Position',[.5 .9 .1 Textfeldbreite],...
                                'Visible','on','BackgroundColor','white',...
                                'Tag','Popup_Nodes',...
                                'String','Test',...
                                'Callback', @PopupNode_Callback);
 
 handles.PropText = uicontrol('Style','text','Units','normalized','Parent',handles.figure_choose_nodes,'Position',[.2 .4 .1 Textfeldbreite],'Visible','on','BackgroundColor','white');
 handles.Values = uicontrol('Style','edit','Units','normalized','Parent',handles.figure_choose_nodes,'Position',[.35 .4 .1 Textfeldbreite],'Visible','on','BackgroundColor','white');


data.Excel = 3;

function PopupNode_Callback(hObject, eventdata)

disp(data.Excel);


 
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.01.2016, 07:09     Titel:
  Antworten mit Zitat      
Code:
function my_gui()
handles.figure1 = figure;
set(handles.figure1,'Units','normalized',...
    'Position', [.2, .2, .7, .7]);

handles.ButtonNode = uicontrol('Style','pushbutton',...
                               'Units','normalized',...
                               'Parent',handles.figure1,...
                               'String','Node',...
                               'Position',[.05 .8 .1 .1],...
                               'Visible','on',...
                               'Callback',@ButtonNode_Callback);
% Choose default command line output for choose_node


data = struct('Excel',0,'XML',2);

function ButtonNode_Callback(hObject,eventdata)

Textfeldbreite = .05;

handles.figure_choose_nodes = figure('Units','normalized','Position', [.1, .1, .7, .7],'Tag','figure_choose_nodes');

handles.Popup_Nodes = uicontrol('Style','popup',...
                                'Units','normalized',...
                                'Parent',handles.figure_choose_nodes,...
                                'Position',[.5 .9 .1 Textfeldbreite],...
                                'Visible','on','BackgroundColor','white',...
                                'Tag','Popup_Nodes',...
                                'String','Test',...
                                'Callback', @PopupNode_Callback);
 
 handles.PropText = uicontrol('Style','text','Units','normalized','Parent',handles.figure_choose_nodes,'Position',[.2 .4 .1 Textfeldbreite],'Visible','on','BackgroundColor','white');
 handles.Values = uicontrol('Style','edit','Units','normalized','Parent',handles.figure_choose_nodes,'Position',[.35 .4 .1 Textfeldbreite],'Visible','on','BackgroundColor','white');


data.Excel = 3;
end
function PopupNode_Callback(hObject, eventdata)

disp(data.Excel);
end
end

sohe dazu hier http://de.mathworks.com/help/matlab.....data-among-callbacks.html unter Create Nested Callback Functions (Programmatic UIs)
das ist glaube ich das was du versucht hast. ohne die end's weiß er ja nicht welche nested sind.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
donjuan_B
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 22.01.15
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 31.01.2016, 13:09     Titel:
  Antworten mit Zitat      
Danke Winkow!

Freue mich sehr über deine schnelle Hilfe!
Die ENDs waren es. Würdest du mir die Nested Callback functions eigentlich empfehlen? Oder gibt es bessere Varianten. Ich möchte Variablen zwischen den Callbacks und verschiedenen figures austauschen.
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: 31.01.2016, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

es ist imho die einfachste Variante Variablen zwischen einer GUI und ihreren Funktionen zu übergeben (siehe letztes end in deinem Codebsp.). Werden die Funktionen einer GUI außerhalb der GUI Funktion gesetzt wie z.B bei guide erstellen GUI's, müsste man mit guidata arbeiten. Zwischen zwei GUI's erfolgt die Übergabe entweder über den In-und Output der subgui, oder mit setappdata und getappdata .

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
donjuan_B
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 22.01.15
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 31.01.2016, 14:35     Titel:
  Antworten mit Zitat      
Ok.
Wenn ich es richtig verstehe, funktioniert das ganze mit den Nested Callback Functions nur, wenn ich diese in der main erstelle. Sollte ich Uicontrols in einem Callback erstellen und im anderen abrufen wollen (Values Beispielsweise), so funktioniert das scheinbar nicht oder?
Ich möchte beispielsweise in einem Callback x-Textfelder erstellen und deren Strings in einem anderen Callback abrufen. Sorry, ich kenne mich mit dem Thema echt gar nicht aus.
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: 31.01.2016, 14:54     Titel:
  Antworten mit Zitat      
Ja, alle Variablen einer parentfunction (z.B. main function der GUI) sind auch deren nested functions bekannt, aber nicht umgekehrt.

In dem Fall müsstest du mit einem handle arbeiten, also eine struct namens handles und jedes object oder variable der struct hinzufügen.

Code:

function Callpack()
% handles in einer subfunction laden
handles = guidata(gcbo);

handles.edit1 = uicontrol(...);

handles.variable = 1;

% Änderungen im handle speichern
guidata(gcbo,handles)
end
 


Oder über setappdata und getappdata .
Private Nachricht senden Benutzer-Profile anzeigen
 
donjuan_B
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 22.01.15
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 31.01.2016, 15:03     Titel:
  Antworten mit Zitat      
Ok. Vielen Dank!

Ich werde es verwenden und hoffen, dass ich bald eine ordentlich GUI besitze Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
donjuan_B
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 22.01.15
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 05.02.2016, 01:30     Titel:
  Antworten mit Zitat      
Vielen Dank für eure Hilfe! Meine Probleme diesbezüglich konnten gelöst werden.
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.