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: Mit Hilfe einer For-Schleife auf GUI s zugreifen!!

 

Volt4you
Forum-Newbie

Forum-Newbie



Beiträge: 5
Anmeldedatum: 11.11.14
Wohnort: Ulm
Version: 12a
     Beitrag Verfasst am: 11.11.2014, 16:47     Titel: GUI: Mit Hilfe einer For-Schleife auf GUI s zugreifen!!
  Antworten mit Zitat      
Hallo Zusammen,

bin schon länger im Forum unterwegs und habe schon viele Probleme dank euch lösen können. DANKE!! (Harald, denny, Jan S.....)

Mein Programm funktioniert schon. Sieht aber noch ziemlich plump aus.

Das Würde ich gerne ändern:
Code:
%Vorläufig
        hook_1=get(checkbox_K1,'Value');
        hook_2=get(checkbox_K2,'Value');
        hook_3=get(checkbox_K3,'Value');
        hook_4=get(checkbox_K4,'Value');
        hook_5=get(checkbox_K5,'Value');
        hook_6=get(checkbox_K6,'Value');
        hook_7=get(checkbox_K7,'Value');
        hook_8=get(checkbox_K8,'Value');
        hook_9=get(checkbox_K9,'Value');
        hook_10=get(checkbox_K10,'Value');
        hook_11=get(checkbox_K11,'Value');
        hook_12=get(checkbox_K12,'Value');


Das wäre meine Lösungsansatz, der nicht funktioniert:

Code:

for h=1:1:12
            n_z=num2str(h);
            check='checkbox_K';
           
            v_hook = ['hook_' num2str(h)];        
            v_check=strcat(check,n_z);
           
            %new_hook=eval(v_hook);
            new_check=eval(v_check);
           
           
            new_hook=get(new_check,'Value');
   end


Bring leider auch nichts wen ich
Code:
new_hook=eval(v_hook);
ein kommentiere.
Habe schon eine änliches Problem gelöst und zwar mit:
Code:

        for b2=1:1:12

            b2=num2str(b2);                                            
            b1='New_T';                                                    
            neu_str= [b1,b2];                                                  
           
            Antwort=eval(neu_str);
            set(Antwort,'String','');

        end


Habe mich im Forum schon um geschaut und es wird vom eval und evalin abgeraten da es das Programm langsam macht, Debuggen schwer und man die Variablen schwer weiter benutzen kann.
Habe es auch schon mit Cell Arrays probiert, komme aber mit den nicht so klar.

Ist mein erster Eintrag bitte um Nachsicht Embarassed und um Anregungen rund um Neue Themen erstellen!
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.11.2014, 17:55     Titel:
  Antworten mit Zitat      
Hallo

Wie verwendest/verarbeitest du diese Variablen weiter? Das wäre für die Beantwortung sehr hilfreich.



Zitat:
Habe mich im Forum schon um geschaut und es wird vom eval und evalin abgeraten da es das Programm langsam macht, Debuggen schwer und man die Variablen schwer weiter benutzen kann.
Habe es auch schon mit Cell Arrays probiert, komme aber mit den nicht so klar.

Über EVAL hast du richtig gelesen. Dieser Konstrukt ist gar nicht nötig.
Welche Schwierigkeiten hast du mit Cells. Statt Cells kann man auch Dynamische Felder nutzen.
z.B sind diese handles(Variablen checkbox_K1) ja in einer handles-Struct, oder?
dann kann man
Code:

hook = cell(1, 12)
for k=1:12
    hook{k} = get( handles.(sprintf('checkbox_K%d',k) ), 'Value');
end
 





Aber ich würde diese handles lieber in ein Array packen, am besten einmalig beim Starten der GUI.

in der OpeningFcn:
Code:

checkbox_list = [checkbox_K1, checkbox_K2, checkbox_K3, checkbox_K4, checkbox_K5, checkbox_K6, checkbox_K7, checkbox_K8, checkbox_K9, checkbox_K10, checkbox_K11, checkbox_K12 ]

% oder
checkbox_list =[];
for k=1:12
   checkbox_list =[checkbox_list, handles.(sprintf('checkbox_K%d',k)) ];
end


handles. checkbox_list = checkbox_list;
 



danach

Code:

hook = get(handles. checkbox_list, 'Value');

 


Zuletzt bearbeitet von denny am 11.11.2014, 22:55, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Volt4you
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 5
Anmeldedatum: 11.11.14
Wohnort: Ulm
Version: 12a
     Beitrag Verfasst am: 11.11.2014, 18:45     Titel:
  Antworten mit Zitat      
Hallo denny,

danke für die schnelle Antwort.

"Hallo

Wie verwendest/verarbeitest du diese Variablen weiter? Das wäre für die Beantwortung sehr hilfreich. " (Wie erstelle ich ein Zitat? Embarassed )


Code:

      if hook_1==1                                                                  
           hold on                                                            
           plot(t,B1,'k');                                                      
      end
       
      if hook_2==1
        hold on
        plot(t,B2,'b');
      end
       .
       .
       .


Ich frage ja die Value der Checkboxen ab allso ob eine hacken gesetzt ist oder nicht und für jede Checkbox (12) plote ich eine Grafen.

Ich habe es mit deine 2 Code-Vorschlägen versucht leider bekomme ich den Fehler:

Undefined variable handles.

Error in Temperaturverlauf/calculate_and_Draw (line 1431)
checkbox_list =[checkbox_list,
handles.(handles.(sprintf('checkbox_K%d',k) ))];

Error while evaluating uicontrol Callback

(Ich benutzte keine GUIDE, kann es dann am Ausdruck " handles. " liegen?)

Bei meiner Version
Code:

for h=1:1:12
            n_z=num2str(h);
            check='checkbox_K';
           
            v_hook = ['hook_' num2str(h)];        
            v_check=strcat(check,n_z);
           
            %new_hook=eval(v_hook);
            new_check=eval(v_check);
           
           
            new_hook=get(new_check,'Value');
   end


bekomme ich :

Undefined function or variable 'hook_1'.

Error in Temperaturverlauf/calculate_and_Draw (line 1480)
if hook_1==1

Error while evaluating uicontrol Callback
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.11.2014, 23:12     Titel:
  Antworten mit Zitat      
Hallo
Für Zitat muss man Quote-Button neben dem Codeumgebung -Button verwenden.

Also wenn du selbst die GUI erstellst, dann kannst du direkt die checkbox-handles bei der Erstellung in einem Array abspeichern.
Also statt
Code:

checkbox_K1 = uicontrol(...)
...
checkbox_K12  = uicontrol(...)
 


besser :

Code:

checkbox_K(1)   = uicontrol(...)
...
checkbox_K(12)  = uicontrol(...)
 


dann später

Code:

hook = get(checkbox_K, 'Value');

% dann zum Vektor konvertieren
hook = cell2mat(hook);

if hook(1)
  hold on                                                            
  plot(t,B1,'k')
end

if hook(2)
   hold on                                                            
   plot(t,B2,'k')
end
 



Zitat:

Code:

if hook_1==1                                                                  
           hold on                                                            
           plot(t,B1,'k');                                                      
      end
       
      if hook_2==1
        hold on
        plot(t,B2,'b');
      end
       .
 




Und an welcher Stelle fragst du das ab, bestimmt in einem Callback?
Private Nachricht senden Benutzer-Profile anzeigen
 
Volt4you
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 5
Anmeldedatum: 11.11.14
Wohnort: Ulm
Version: 12a
     Beitrag Verfasst am: 12.11.2014, 09:38     Titel:
  Antworten mit Zitat      
Morgen denny,

Zitat:
Also wenn du selbst die GUI erstellst, dann kannst du direkt die checkbox-handles bei der Erstellung in einem Array abspeichern.
Also statt


So habe ich das auch gemacht
Code:
checkbox_K1=uicontrol(lab,...                                              
                                  'Style','checkbox',...                                                
                                  'Value',0,...                                                            
                                  'Position',[10 850 200 20]);

checkbox_K2=uicontrol(lab,...                                              
                                  'Style','checkbox',...  
                                  'Value',0,...                                                          
                                  'Position',[10 780 200 20]);
                                  ....

Deine Lösung gefällt mir besser
Code:
checkbox_K(1)=uicontrol(lab,...                                              
                                  'Style','checkbox',...                                                
                                  'Value',0,...                                                            
                                  'Position',[10 850 200 20]);

checkbox_K(2)=uicontrol(lab,...                                              
                                  'Style','checkbox',...  
                                  'Value',0,...                                                          
                                  'Position',[10 780 200 20]);
                                  ....


Zitat:
Und an welcher Stelle fragst du das ab, bestimmt in einem Callback?

Genau benutze eine PushButton um Checkboxen oder Editfelder zu bestätigen,dann läuft eine Rechnung mit den eingegebenen Werten und lass am Ende immer den entsprechen Grafen mit dem entsprechenden Checkbox (Hacken) ploten.
Code:
AC=uicontrol('Parent',lab,...                                              
                      'Style','PushButton',...                                                
                      'String','Bestätigen',...                                              
                      'FontSize'[10],...                                                      
                      'ForegroundColor',[0 01],...                                          
                      'Position',[475 310 100 50],...                                            
                      'Callback',  {@calculate_and_Draw,...

Mein Hauptziel war es eigentlich nicht so schöne Programmteile zu verbessern bzw. mit Hilfe einer Schleife und ev. einem Cell Array (ohne eval und evalin)
Variablen zu erstellen und die Werte zu übergeben.
Code:
%Umwandlung der "Texteingabe" in eine Zahl:                        
        R1=str2double(get(w1_handel,'String'));
        R2=str2double(get(w2_handel,'String'));
        R3=str2double(get(w3_handel,'String'));
        R4=str2double(get(w4_handel,'String'));
        R5=str2double(get(w5_handel,'String'));
        R6=str2double(get(w6_handel,'String'));
        R7=str2double(get(w7_handel,'String'));
        R8=str2double(get(w8_handel,'String'));
        R9=str2double(get(w9_handel,'String'));
        R10=str2double(get(w10_handel,'String'));
        R11=str2double(get(w11_handel,'String'));
        R12=str2double(get(w12_handel,'String'));

w1_handel... bis w12_handel sind Editfelder weiter oben im Programm ('Style','Edit',...).
R1...R12 sind Werte die ich für meine Rechnung benötige
Private Nachricht senden Benutzer-Profile anzeigen
 
Volt4you
Themenstarter

Forum-Newbie

Forum-Newbie



Beiträge: 5
Anmeldedatum: 11.11.14
Wohnort: Ulm
Version: 12a
     Beitrag Verfasst am: 12.11.2014, 16:51     Titel:
  Antworten mit Zitat      
Hallo zusammen,

Bin auf eine Lösungsansatz gekommen aber hänge an eine Punkt wider fest!
Code:
        R=cell(1,12);
        w=cell(1,12);
        for k=1:12
            R{k}=sprintf('R%d',k);
            w{k} = sprintf('w%d_h',k);          

            R{k}=str2doubel(get(w{k},'String'));
        end

Tja leider geht es nicht!--->
Code:

Wenn ich das machen, z.b für R=cell(1,12) kommt das raus
Code:
R =

R1R2R3R4R5R6R7R8R9R10R11R12


Mit R(1:2) würde ich auf R1 zu greifen. Weis jetzt nicht so recht wie ich auf z.b R10 in der Schleife/n zu greifen soll.
Bin für andere Vorschläge für die Schleife offen
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.