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 -edit felder/static text felder in for Schleife benennen

 

chris4aus
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2011, 06:49     Titel: Gui -edit felder/static text felder in for Schleife benennen
  Antworten mit Zitat      
Hallo!

Ich baue ein GUI mittels guide.
Ich baue Schichten mit jeweils den gleichen Parametern (Hoehe, Staerke, Breite, Farbe). Die Edit/Static text felder habe ich alle manuell benannt. Nun moechte ich aber, dass der Nutzer angibt, wieviele Schichten es gibt und das Gui selbststaendig die Schichten benennt, damit ich nachher mit einer for-Schleife darauf zugreifen kann.
Code:

function hoehe1_Callback(hObject, ~, handles)
function hoehe2_Callback(hObject, ~, handles)
function hoehe3_Callback(hObject, ~, handles)
...
function hoehex_Callback(hObject, ~, handles)
 

in jeder Hoehe callback steht z.B.:
Code:

handles.par1 = str2double(get(hObject,'String'));
set_back(handles.par1,handles.text_hoehe1,hObject,handles.text_output_values);
pos_check(handles.par1,handles.text_hoehe1,hObject,handles.text_output_values);
 


Geht das zu bewerkstelligen?
Bzw. wenn die Benennung nur manuell geht, kann ich dann wenigstens die Callbacks automatisieren, damit ich nicht immer hoehe1 in hoehex umwandeln muss?

Danke im Voraus.

Gruss,
Christiane
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: 16.11.2011, 11:28     Titel: Re: Gui -edit felder/static text felder in for Schleife bene
  Antworten mit Zitat      
Hallo chris4aus,

Dazu eignen sich Arrays, statt den Index in den Namen der Variablen und der Callbacks zu packen:
Code:

function hoehe_Callback(hObject, ~, handles, 1)
function hoehe_Callback(hObject, ~, handles, 2)
...
function hoehe_Callback(hObject, ~, handles, x)
 

Code:

index = 1;
handles.par(index) = str2double(get(hObject,'String'));
set_back(handles.par(index), handles.text_hoehe(index), hObject, handles.text_output_values);
pos_check(handles.par(index), handles.text_hoehe(index), hObject, handles.text_output_values);

Und falls die Daten unterschiedlichen Typ oder Dimensionen haben, ist ein Cell-Array geeignet.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2011, 04:11     Titel: geht leider nicht
  Antworten mit Zitat      
Hallo Jan!

Ich habe es so versucht, aber dann zeigt er mir folgenden Fehler an, wenn ich die Zahlen als Variable deklariere:
Code:

??? Error: File: test_schicht.m Line: 100 Column: 45
Unexpected MATLAB expression.
 


Also habe ich diese Zahlen weggelassen, aber ich weiss noch nicht, wie du alle hoehe_Callback nennen kannst, da der Callback-Name doch den Tag angibt und du keinen Tag doppelt haben kannst.

Ich habe die vier Test-Dateien angehaengt - es funktioniert leider nicht.

test_schicht.fig
 Beschreibung:
gui - fig-file

Download
 Dateiname:  test_schicht.fig
 Dateigröße:  5.62 KB
 Heruntergeladen:  311 mal
test_schicht.m
 Beschreibung:
gui - m-File

Download
 Dateiname:  test_schicht.m
 Dateigröße:  9.21 KB
 Heruntergeladen:  289 mal
set_back_schicht.m
 Beschreibung:
Unterfunktion

Download
 Dateiname:  set_back_schicht.m
 Dateigröße:  273 Bytes
 Heruntergeladen:  288 mal
pos_check_schicht.m
 Beschreibung:
Unterfunktion

Download
 Dateiname:  pos_check_schicht.m
 Dateigröße:  357 Bytes
 Heruntergeladen:  343 mal
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: 17.11.2011, 12:20     Titel: Re: geht leider nicht
  Antworten mit Zitat      
Hallo chris4aus,

Duie Fehlermeldung sagt, dass die zeile 100 in Spalte 45 einen Syntax-Fehler enthält. Wenn Du diese Zeile hier postest, können wir Dir auch mitteilen, was das Problem ist.

Man kann natürlich Tags auch doppelt vergeben und die Callbackfunktionen bei Bedarf per Hand setzen. GUIDE ist zwar nicht besonders flexibel, aber Du kann doch alles nach Belieben anpassen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2011, 01:51     Titel: Zeile 100
  Antworten mit Zitat      
Hallo Jan!

Ja, die Fehlermeldung hatte ich schon verstanden; ich hatte deine Version kopiert:
Code:

function edit1_Callback(hObject, ~, handles,1)
    index = 1;
    handles.par(index) = str2double(get(hObject,'String'));
    set_back_schicht(handles.par(index), handles.text_hoehe(index), hObject);
    pos_check_schicht(handles.par(index), handles.text_hoehe(index), hObject);
 
mit dieser Index 1. Aber dann sagt er mir halt Syntax-error.

Aber ich bin gerade dabei, die Uebersicht anders aufzubauen (anstatt die Panels uebereinander, ein Panel umbenennen und die Werte in einem struct speichern und wieder laden - ich muss da noch ein wenig rumprobieren...)
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2011, 06:14     Titel: Neue Struktur
  Antworten mit Zitat      
Hallo!

Ich bin jetzt so weit, dass sich die Ueberschriften im Gui aendern und auch die Werte gespeichert werden. (Muss noch pruefen, was passiert, wenn Start_button gedrueckt wird und wie ich "alte" Werte lade)
Aber damit brauche ich nur noch eine Callback_Funktion pro selben Faktor:
Code:
function layer_no_Callback(hObject, ~, handles) % NoLayers
test_par_whole(hObject,handles);
turn_lay(handles);
 

Code:

% --- Executes on slider movement.
function slider_layer_Callback(hObject, ~, handles)
sliderpos = round(get(hObject,'Value'));
number_name = get(handles.panel_L,'Title');
% if new value is different to old value
if sliderpos ~= str2double(number_name(end))
    popupheight_stage_Callback(gcbo, [], handles);
    handles = guidata(hObject);
    number_name = get(handles.panel_L,'Title');
    % create scaffold out of entered values
    % create cells to speed up loops
    sub_width = zeros(str2double(get(handles.sub_no1,'String')),1);
    hspace = zeros(str2double(get(handles.sub_no1,'String')),1);
    F_le = zeros(str2double(get(handles.sub_no1,'String')),1);
    % create cells and matrices to save later
    max_x = 0;
    for s=1:str2double(get(handles.sub_no1,'String')) % for each sublayer
        name_subwi = findobj('Tag',['sub_width1',num2str(s)]);
        name_hspa = findobj('Tag',['hspace1',num2str(s)]);
        name_FRle = findobj('Tag',['FRle1',num2str(s)]);
        sub_width(s)=str2double(get(name_subwi,'String'));
        hspace(s)=str2double(get(name_hspa,'String'));
        F_le(s)=str2double(get(name_FRle,'String'));
        % maximum dimensions of stage
        max_x = max(max_x,...
            sqrt((handles.height + ((sub_width(s)/hspace(s))+2)...
                *str2double(get(handles.vspace,'String')))^2 + (sub_width(s))^2));
    end % sublayer

    % save structure in scaffold  
    scaffold(str2double(number_name(end))) = struct('type_layer', str2double(number_name(end)), ...
        'height', str2double(get(handles.height_stage,'String')), ...
        'vspace', str2double(get(handles.vspace,'String')), ...
        'FRse', str2double(get(handles.FRse,'String')), ...
        'FRbi', str2double(get(handles.FRbi,'String')), ...
        'NoLayers', str2double(get(handles.NoLayers1,'String')), ...
        'layer_width', str2double(get(handles.layer_width1,'String')),...
        'angle', str2double(get(handles.angle1,'String')), ...
        'offset_no', str2double(get(handles.offset_no1,'String')), ...
        'stage_dim', max_x,...
        'sub_width', sub_width , 'hspace', hspace ,'FRle', F_le);

    % now create new lay out for layer chosen
    slider_name_set(num2str(sliderpos),handles);
end % old value is different to new

Code:
function slider_name_set(number,handles)

title_name = ['Layer ',number];
subtit1_name = ['sublayer ',number,'.1'];
subtit2_name = ['sublayer ',number,'.2'];
subtit3_name = ['sublayer ',number,'.3'];
subtit4_name = ['sublayer ',number,'.4'];
subtit5_name = ['sublayer ',number,'.5'];
subtit6_name = ['sublayer ',number,'.6'];
NoLayers_name = ['No. of layer ',number];
set(handles.panel_L,'Title',title_name);
set(handles.panel_sub1,'Title',subtit1_name);
set(handles.panel_sub2,'Title',subtit2_name);
set(handles.panel_sub3,'Title',subtit3_name);
set(handles.panel_sub4,'Title',subtit4_name);
set(handles.panel_sub5,'Title',subtit5_name);
set(handles.panel_sub6,'Title',subtit6_name);
set(handles.text_NoLayers,'String',NoLayers_name);


Aber trotzdem DANKE!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jette
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.02.09
Wohnort: München
Version: R2010b, R2015b
     Beitrag Verfasst am: 21.11.2011, 12:33     Titel:
  Antworten mit Zitat      
Nach meiner Erfahrung sollte man dynamische GUIs (bei denen die Anzahl der Elemente von Anwendereingaben abhängt) ohne GUIDE programmieren. Dann solltest Du Deine Schichten auch einfacher selbst automatisiert programmieren können. Hast Du das schon mal versucht?
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 01:17     Titel: selbst programmieren
  Antworten mit Zitat      
Hallo Jette!

Ich habe noch kein GUI ohne guide erstellt. Und aus Zeitmangel...

Das Programm laeuft jetzt erstmal - aber du hast recht, wenn ich das Programm nochmal neu schreiben wuerde, wuerde ich wahrscheinlich auf guide verzichten.

Gerade bin ich auch auf Tabs gestossen, die natuerlich fuer meine Sache ganz super sind --> einfacher zu verstehen als den slider.
Daher werde ich nach Beenden alle Funktionen die Benutzeroberflaeche wahrscheinlich neu schreiben (ich brauche erst mal was zum Praesentieren!! Smile)

Danke,
Christiane
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 - 2025 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.