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

Gui: Opening Function wird mehrmals durchlaufen

 

Tex

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 09:49     Titel: Gui: Opening Function wird mehrmals durchlaufen
  Antworten mit Zitat      
Hallo Zusammen,
ich hab ein Gui erstellt, welches den Anwender beim plotten von Daten unterstützen soll.
Die Struktur besteht aus 2 Guis wovon man im ersten anwählen kann wieviele Plots man erstellen will und im Sub-GUI (welches sich öffnet wenn man auf einen Settings-Button klickt) können sachen wie Linienstärke, Farbe, Legende und die eigentlichen Daten aus den Workspace, die übereinander geplottet werden sollen, spezifiziert werden. Also eigentlich ne simples Programm.
Mein Problem liegt darin, dass ich, wenn ich einmal Daten geplottet habe und merke, dass ich zum Beispiel das Grid vergessen habe, wieder zurückgehen möchte und nicht alle Daten noch einmal neu eingeben will. Meine Daten sind in einer Strukturvariable gespeichert. Wenn ich dann erneut auf den Settings-BUtton klicke sollen die in der Struktur gespeicherten Daten eingelesen und automatisch die entrsprechenden Edit-Boxen und Checkboxen gesetzt werden.
Das eigentliche Problem tritt nun auf wenn ich die Daten dann erneut speichere. Da hab ich ausgemacht, dass beim klicken auf den "Übernehmen-Button" aus irgendwelchen Gründen die Opening-Function durchlaufen wird, obwohl ich das Sub-Gui in dieser Aktion eigentlich nur schließe. Und in der Opening-Function ruft er ja wieder die alten Daten auf. Das behakt sich irgendwie. Wieso geht er da ein zweites Mal in die Opening-Function bzw. wie kann ich es einfach realisieren, dass ich alte daten einlesen kann, die zuivor gesetzt wurden?
Weiß da jemand Rat? Bin auch natürlich auch für Alternativ-Vorschläge offen, wie man alte Daten einlesen kann.
Danke im Voraus
Gruß

Tex


Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 11:06     Titel:
  Antworten mit Zitat      
Servus Tex

Poste doch bitte mal Deinen Übenrehmen_Button_Callback.

Außerdem würde ich gerne wissen welche OpeningFcn 2x kommt, und stelle diese bitte auch herein.
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Tex

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 11:56     Titel:
  Antworten mit Zitat      
Hi Dagnabit
danke erstmal das du dich dessen annimmst.

Code:
%
% --- Executes just before Plothelper_Sub is made visible.
function Plothelper_Sub_OpeningFcn(hObject, eventdata, handles, varargin)
movegui(gcf,'north');
%Up und down buttons mit Pfeilen belegen
set(handles.pushbutton_legend_up,'cdata',upbutton);
set(handles.pushbutton_legend_down,'cdata',downbutton);
set(handles.pushbutton_y_up,'cdata',upbutton);
set(handles.pushbutton_y_down,'cdata',downbutton);
set(handles.pushbutton_x_up,'cdata',upbutton);
set(handles.pushbutton_x_down,'cdata',downbutton);

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

update_listbox(handles);

% Update handles structure
guidata(hObject, handles);
 

Ist eigentlich ne normale Opening_Fcn. Mit old_data wird das entsprechende m-File aufgerufen in welchem ich die alten Daten einlese.

Der übernehmen button:

Code:
%
function pushbutton_apply_Callback(hObject, eventdata, handles)
button_state1= getappdata(0,'settings1');
button_state2= getappdata(0,'settings2');
button_state3= getappdata(0,'settings3');
button_state4= getappdata(0,'settings4');
button_state5= getappdata(0,'settings5');
button_state6= getappdata(0,'settings6');
button_state7= getappdata(0,'settings7');


list_entries_x = get(handles.listbox_x,'String');
num_x = size(list_entries_x);
list_entries_y = get(handles.listbox_y,'String');
num_y = size(list_entries_y);
set(handles.listbox_x,'Value',[1:num_x]);              %selects all listbox entries (x)
set(handles.listbox_y,'Value',[1:num_y]);              %selects all listbox entries(y)
clear list_entries_x list_entries index_selected list_entries_y num_x num_y;

global Fig;      %Strukturvariable in die alle Daten geschrieben werden.
evalin ('base',['global Fig;']);

if button_state1 == 1   % Get Tag of selected object
    handles.id = 1;                  % Identifizierungsvariable für die Subfunctions welcher Button gedrückt wurde
Fig.fig1 = [];
   
    list_entries = get(handles.listbox_y,'String');
    index_selected = get(handles.listbox_y,'Value');
    number_y = length(list_entries);
    if numel(list_entries)==0
        errordlg('No y-variable selected','Input Error','modal');
        return
    else
        for i=1:number_y
            transfer_command = ['Fig.fig1.y_variable.y',num2str(i),' = list_entries(index_selected(',num2str(i),'));'];
            eval(transfer_command);
        end
        clear i transfer_command;
    end
    clear list_entries index_selected;
   
    list_entries = get(handles.listbox_x,'String');
    index_selected = get(handles.listbox_x,'Value');

    k = numel(list_entries);
    if k==1
        Fig.fig1.x_variable.x1 = list_entries(index_selected(1));
    end
    if numel(list_entries)==0
        errordlg('No x-variable selected','Input Error','modal');
        return
    end
    if k > 1
        if k~=number_y
            errordlg('Number of elements for variable x does not match number of elements for variable y','Input error','modal');
            return
        end
    else
        Fig.fig1 = [];
        for i=1:k
            transfer_command = ['Fig.fig1.x_variable.x',num2str(i),' = list_entries(index_selected(',num2str(i),'));'];
            eval(transfer_command);
            clear transfer_command;
        end
        clear i;
    end
clear k list_entries index_selected number_y;
   
%Subfunctions
    get_xlabel(handles);                    %labels
    get_ylabel(handles);
    legend_on(handles);                     %legend
    get_title(handles);                     %title
    grid_on(handles);                       % grid
    linewidth(handles);                     %linewidth
    xy_range(handles);                      %(x,y)-range
    colororder(handles);                    %colororder

    % change main gui strings
    x1 = get(handles.listbox_x, 'String');
    y1 = get(handles.listbox_y, 'String');
    setappdata(0,'x1_variables',x1);
    setappdata(0,'y1_variables',y1);
    clear x1 y1;
end


%hier zwischen kommt der entsprechende Code für die Buttons 2-7



close(Plothelper_Sub);
 


Danke für deine Hilfe, hoffe du kannst da nen bisschen was mit anfangen.
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 12:35     Titel:
  Antworten mit Zitat      
Servus Tex

Ersetze mal
Code:

close(Plothelper_Sub);

mit
Code:

delete(Plothelper_Sub);

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Tex

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2009, 08:43     Titel:
  Antworten mit Zitat      
Hallo Dagnabit,
vielen Dank für deine Mühen, aber leider führt das auch nicht zum Erfolg.

Wie kann man denn allgemein alte Daten einlesen. Es gibt doch zuhauf Programme wo man mit einem "Optionen"-Button bestimmte Einstellungen setzen kann.

In diesem konkreten Fall soll es ja so sein:
Ich setze meine Einstellungen bzgl. Linienbreite, Farbe, Legende, Titel, Achsenbeschriftung etc......
Und wenn ich dann beim Plotten sehe, dass ich das Grid vergessen habe oder die Linienbreite zu groß ist, will ich zurückgehen und ja nicht alle Einstellungen in meinem Sub-Gui neu setzen müssen, sondern ich möchte auf Optionen klicken und möchte meine zuletzt gewählten Einstellungen angezheigt haben.
Das muss doch irgendwie gehen.

Nur ich hab halt alle Einstellungen in meine Strukturvariable mit rein geschrieben (in der ich auch die zu plottenden Werte habe) und wollte die in der Opnening_Fcn des Sub-Guis auslesen.
Nur da er beim Übernehmen der Einstellungen (Drücken des Apply-Buttons) nocheinmal die Opening_Fcn durchläuft, gerät da was durcheinander.

Ich bin auch für jede Alternativmethode dankbar........

Gruß
Tex
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2009, 08:40     Titel:
  Antworten mit Zitat      
Servus Tex

Also ich würde so vorgehen:

1. Setze in der OpeningFcn Deines MainGUI´s Defaultwerte für Dein Fig- stucture
Code:
Fig.Eigenschaft1 = ...;
Fig.Eigenschaft2 = ...;

und speichere diese als Applicationsdaten
Code:


3. In der OpeningFcn Deiner SubGUI holst Du Dir mit
Code:
Fig = getappdata( 0, 'Fig');
Deine Defaultwerte und schreibst Sie in die Felder/ Boxen/ ...

4. In der Callback_Fcn Deines Apply- Buttons holst Du Dir die Werte aus den Feldern/ Boxen/ ... wieder und speicherst diese wieder als appdata
Code:
Fig.Eigenschaft1 = get(handles.???,...;
Fig.Eigenschaft2 = get(handles.???,...;

setappdata( 0, 'Fig', Fig)




Du kannst somit in jeder Funktion/ Callback Deiner MainGUI und SubGUI auf die Fig- structure zugreifen
Code:
Fig = getappdata( 0, 'Fig');

_________________

lg
Martin
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.