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

Übergabe von Werten innerhalb einer GUI ohne GUIDE

 

JanB
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2014, 14:21     Titel: Übergabe von Werten innerhalb einer GUI ohne GUIDE
  Antworten mit Zitat      
Hallo,

ich erstelle gerade meine erste GUI ohne GUIDE, da ich gerne auf Reiter zurückgreifen möchte. Hierfür verwende ich die uitabpanel-Funktion aus dem File-Exchange.
Hier ein vereinfachter Code von dem was ich gerne machen möchte:

Code:

function test

hfig = figure;
handles.button = uicontrol('Parent',hfig,'style','pushbutton','position',[50 300 50 50],'string','Test','Callback',@Test_Callback);
huipanelTabs = uipanel('Parent',hfig,'Position',[0.05 0.05 0.5 0.5]);
uitabpanel('Parent',huipanelTabs,'style','centertop','Title',{'Test1','Test2'},'CreateFcn',@CreateTab);
handles.test{1} = 1;

%%% Update handles structure
guidata(hfig, handles);

function CreateTab(hfig,~,hpanel,~)
handles = guidata(hfig);

handles.lb_cell = uicontrol('Parent',hpanel(1),'style','listbox','position',[10 10 120 100],'string','test','FontSize',8,'Tag','lb_cells');

%%% Update handles structure
guidata(hfig, handles);

function Test_Callback(hfig, eventdata, handles)

abc = get(handles.lb_cell,'String')

%%% Update handles structure
guidata(hfig, handles);
 


in der CreateTab-Funktion soll eine Listbox in einem Tab erstellt werden, auf die ich anschließend zugreifen möchte, jedoch wird die Variabel nicht übergeben.
Aus GUIs mit GUIDE erstellt habe ich den Befehl guidata, immer so verstanden, dass dieser meine Strukturen aktualisiert, bezogen auf die figure, in der ich dies gespeichert haben möchte. Hier sollte somit meine Struktur 'handles' in der figure 'hfig' gespeichert werden, welches jedoch nicht der Fall ist.

Ich würde mich freuen, wenn mir jemand weiterhelfen kann.

Gruß,
Jan
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 23.03.2014, 22:30     Titel:
  Antworten mit Zitat      
Zitat:
Aus GUIs mit GUIDE erstellt habe ich den Befehl guidata, immer so verstanden, dass dieser meine Strukturen aktualisiert, bezogen auf die figure, in der ich dies gespeichert haben möchte. Hier sollte somit meine Struktur 'handles' in der figure 'hfig' gespeichert werden, welches jedoch nicht der Fall ist.


Hallo, doch das ist der Fall,
das Problem liegt hier eher an der Übergabeparameter, ein Callback hat 2 Pflichtparameter, welche immer mit übergeben werden, und den 3. Parameter handles, wird nur beim GUIDE automatisch definiert/übergeben.
Also wenn du die GUI manuell bastelst, musst du die handles(also 3.Parameter) auch manuell übergeben. Bei der Übergabe wird aber kein Update der Struktur gemacht, sondern nur ein Zustand zum Zeitpunkt der Übergabe gemacht.
Deswegen hier besser Update manuell durchzuführen. (Kommentare dazu unten)

Weiteres Problem beim GUIDATA liegt in der Gefahr, dass die Werte überschrieben werden können.(siehe dazu Kommentare unten)

Code:


function test_gui

hfig = figure;
handles.button = uicontrol('Parent',hfig,'style','pushbutton','position',[50 300 50 50],'string','Test','Callback',@Test_Callback);
huipanelTabs = uipanel('Parent',hfig,'Position',[0.05 0.05 0.5 0.5]);
handles.test{1} = 1;
%%% Update handles structure
guidata(hfig, handles);

% nach hinten verschieben, damit die Änderungen in Handles-Struktur nicht überschrieben werden
%
% wenn eine Funktion eine Unterfunktion aufruft, und dort die Änderung in handles gemacht werden, kriegt die Oberfunktion davon nichts mit, also muss entweder Handles zurückgeben werden oder durch GUIDATA upgedated werden
uitabpanel('Parent',huipanelTabs,'style','centertop','Title',{'Test1','Test2'},'CreateFcn',@CreateTab);


function CreateTab(hfig,~,hpanel,~)
handles = guidata(hfig);

handles.lb_cell = uicontrol('Parent',hpanel(1),'style','listbox','position',[10 10 120 100],'string','test','FontSize',8,'Tag','lb_cells');

%%% Update handles structure
guidata(hfig, handles);


% 3.Parameter muss man explizit übergeben werden, sonst ist dieser undefiniert
function Test_Callback(hfig, eventdata)
%
% besser update manuell durchführen,
% weil bei der Übergabe wird der Zustand zum Zeitpunkt der Callback-Definition gemacht
handles = guidata(hfig);
abc = get(handles.lb_cell,'String')

%%% Update handles structure
guidata(hfig, handles);
 
 


Zuletzt bearbeitet von denny am 24.03.2014, 17:00, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
JanB
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 11:13     Titel:
  Antworten mit Zitat      
Hallo denny,

vielen Dank für deine Hilfe, funktioniert jetzt genau, wie es soll. Die Übergabe der Variabeln funktioniert jetzt genauso wie ich mir das vorstelle.

Gruß,
Jan
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.