IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Gestion des handles


Sujet :

Interfaces Graphiques

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Gestion des handles
    Bonjour,

    J'ai créé une figure avec le guide. Sur clic d'un bouton valider, une nouvelle figure est générée comme je l'avais décrite dans cette discussion.
    Pour résumer, dans une première interface, j'indique un nombre N et je clique sur un bouton "valider" qui me appelle la fonction pushbutton7_Callback().
    Cette fonction génère N fois les éléments contenus dans ma boucle for.

    J'aimerais récupérer la valeur des champs 'String' entrées par l'utilisateur dans les uicontrols 'edit' et les stocke dans un tableau (arrayInfoImg) généré en cliquant sur un pushbouton "ok" qui appelle la fonction okImages_Callback().


    Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    % --- Executes on button press in pushbutton7.
    function pushbutton7_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton7 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    a = 180;
    b = str2double(get(handles.edit7, 'String'));
    wd = cd();
    figureFileName = [wd '\imgProp.fig'];
    fig = figure('FileName', figureFileName, 'Name', 'Propriétés des jeux d''images', 'Tag', 'imgProp', 'NumberTitle', 'off', 'MenuBar', 'none', 'Color', [0.925 0.914 0.847], 'Position', [360 502 400 a*b+20]);
    movegui(fig,'center')
    c = 5;
    uicontrol('Style', 'pushbutton', 'Position', [290 c 70 22], 'Tag', 'okTag', 'Callback', @okImages_Callback, 'String', 'Ok', 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
    for i = 1:b
        j = num2str(i);
        string = ['** Set ' j];
        setTag = ['setTag' j];
        uicontrol('Style', 'text', 'FontSize', 10, 'Position', [20 c+170 100 20], 'HorizontalAlignment', 'left', 'Tag', setTag, 'String', string, 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        % nom du set
        uicontrol('Style', 'text', 'FontSize', 10, 'Position', [80 c+170 40 20], 'HorizontalAlignment', 'left', 'String', 'Nom', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        nomTag = ['nomTag' j];
        uicontrol('Style', 'edit', 'String', '', 'Position', [120 c+170 180 20], 'HorizontalAlignment', 'left', 'Tag', nomTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        % Commentaire
        uicontrol('Style', 'text', 'FontSize', 8, 'Position', [20 c+115 160 20], 'HorizontalAlignment', 'left', 'String', 'Commentaire (html accepté)', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        commentTag = ['commentTag' j];
        uicontrol('Style', 'edit', 'Min', 1, 'Max', 10, 'String', '', 'Position', [20 c+55 360 60], 'HorizontalAlignment', 'left', 'Tag', commentTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        % Transparence
        uicontrol('Style', 'text', 'FontSize', 8, 'Position', [20 c+30 220 20], 'HorizontalAlignment', 'left', 'String', 'Valeurs (R,V,B) du pixel seuil transparence', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        redTag = ['redTag' j];
        uicontrol('Style', 'edit', 'String', '0', 'Position', [240 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', redTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        greenTag = ['greenTag' j];
        uicontrol('Style', 'edit', 'String', '0', 'Position', [280 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', greenTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        blueTag = ['blueTag' j];
        uicontrol('Style', 'edit', 'String', '0', 'Position', [320 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', blueTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);    
        c = c+a;
    end
        saveas(gcf, figureFileName)
        % handles = guihandles;
     
     
    function okImages_Callback(hObject, event, handles)
        handles=guihandles(Interface2);
        guidata(Interface2, handles);
        a = str2double(get(handles.edit7, 'String'));
        wd = cd();
        figureFileName = [wd '\imgProp.fig'];
        h = hgload(figureFileName);
        handles=guihandles(h); 
        guidata(h,handles);
        arrayInfoImg = cell(a,4); % 4 colonnes : nom, chemin, commentaire, [r v b]
        for i = 1:a
            j = num2str(i);
            % stocke noms des sets
            nomTag = ['nomTag' j];
            arrayInfoImg{i,1} =  get(handles.(nomTag), 'String'); % ne marche pas, renvoie chaine vide..? le texte tapé n'est pas pris en compte?
        % ajouter les autres infos... (nom, commentaire, etc..) 
        end
    J'ai l'impression que le code tel que je l'ai tapé ne permet pas "d'enregistrer" la valeur des champs string de mes edittexts...
    J'ai essayé assignin mais je n'ai rien pu en tirer...

    Auriez-vous une solution à mon problème? (j'espère l'avoir bien expliqué..)
    Merci par avance.


    PS :
    1 - Un aperçu de mes figures en pièce jointe (dans le code ci-dessus, j'ai supprimé le code générant le bouton parcourir pour alléger)
    2 - Petite info : pour récupérer les handles de ma figure générée, je l'enregistre puis je la charge (je sais c'est une bidouille, mais ça marche).
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    C'est étrange.
    Par contre je ne comprends pas pourquoi tu fais des GUIHANDLES partout...Peut-être que du coup ça regénère une structure handles bizarre. (Je n'utilise jamais cette fonction donc j'ai un peu du mal avec)

    Et aussi il y a un truc qui cloche : c'est comment ton callback connait-il la variable Interface2 ?

    Un code tout court pour tester et qui fonctionne chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function varargout=essai(varargin)
    fig=figure;
    ed=uicontrol('style','edit','pos',[50 50 100 20]);
    bt=uicontrol('string','ok','callback',@ok);
        function ok(varargin)
            get(ed,'String')
        end
    end
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Et aussi il y a un truc qui cloche : c'est comment ton callback connait-il la variable Interface2 ?
    Interface2 est le nom de l'interface à partir de laquelle je génère ma seconde interface...

    D'après ce que je vois, je maitrise (très) mal l'accès aux figures et handles, la remarque suivante en illustrant un exemple flagrant.
    Citation Envoyé par Caro-Line Voir le message
    Par contre je ne comprends pas pourquoi tu fais des GUIHANDLES partout...Peut-être que du coup ça regénère une structure handles bizarre. (Je n'utilise jamais cette fonction donc j'ai un peu du mal avec)
    Ce GUIHANDLES me permet de recupérer le contenu de mon uicontrol edit de Interface2 afin de générer un tableau contenant le nombre adéquat de lignes (a)..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles=guihandles(Interface2);
        guidata(Interface2, handles);
        a = str2double(get(handles.edit7, 'String'));
    Manifestement il faut que je trouve un moyen 'viable' de charger à la fois les handles de ma figure "interface2' et de ma figure courante dans la fonction okImages_Callback()... sans à avoir à sauvegarder cette figure...

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Citation Envoyé par ontheroadagain Voir le message
    Manifestement il faut que je trouve un moyen 'viable' de charger à la fois les handles de ma figure "interface2' et de ma figure courante dans la fonction okImages_Callback()... sans à avoir à sauvegarder cette figure...
    A priori si j'ai bien tout vu, tu peux retirer tout les GUIDATA et GUIHANDLES de ton programme, ils ne sont pas utiles puisque tu ne modifies pas la structure handles dans ton code.

    De plus, la structure handles est passée en argument d'entrée de tes Callback donc à la limite, si tu veux vraiment utiliser GUIDATA (ou GUIHANDLES mais je préfères GUIDATA), tu peux le mettre à la fin de ton Callback mais il ne sera utile que si tu modifies ta structure handles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    % --- Executes on button press in pushbutton7.
    function pushbutton7_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton7 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    a = 180;
    b = str2double(get(handles.edit7, 'String'));
    wd = cd();
    figureFileName = [wd '\imgProp.fig'];
    fig = figure('FileName', figureFileName, 'Name', 'Propriétés des jeux d''images', 'Tag', 'imgProp', 'NumberTitle', 'off', 'MenuBar', 'none', 'Color', [0.925 0.914 0.847], 'Position', [360 502 400 a*b+20]);
    movegui(fig,'center')
    c = 5;
    handles.PbOk = uicontrol('Style', 'pushbutton', 'Position', [290 c 70 22], 'Tag', 'okTag', 'Callback', @okImages_Callback, 'String', 'Ok', 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
    for i = 1:b
        j = num2str(i);
        string = ['** Set ' j];
        setTag = ['setTag' j];
        handles.(setTag)= uicontrol('Style', 'text', 'FontSize', 10, 'Position', [20 c+170 100 20], 'HorizontalAlignment', 'left', 'Tag', setTag, 'String', string, 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        % nom du set
        handles.StText1(i) = uicontrol('Style', 'text', 'FontSize', 10, 'Position', [80 c+170 40 20], 'HorizontalAlignment', 'left', 'String', 'Nom', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        nomTag = ['nomTag' j];
        handles.(nomTag) = uicontrol('Style', 'edit', 'String', '', 'Position', [120 c+170 180 20], 'HorizontalAlignment', 'left', 'Tag', nomTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        % Commentaire
        handles.StText2(i) = uicontrol('Style', 'text', 'FontSize', 8, 'Position', [20 c+115 160 20], 'HorizontalAlignment', 'left', 'String', 'Commentaire (html accepté)', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        commentTag = ['commentTag' j];
        handles.(commentTag) = uicontrol('Style', 'edit', 'Min', 1, 'Max', 10, 'String', '', 'Position', [20 c+55 360 60], 'HorizontalAlignment', 'left', 'Tag', commentTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        % Transparence
        handles.StTransp(i) = uicontrol('Style', 'text', 'FontSize', 8, 'Position', [20 c+30 220 20], 'HorizontalAlignment', 'left', 'String', 'Valeurs (R,V,B) du pixel seuil transparence', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
        redTag = ['redTag' j];
        handles.(redTag) = uicontrol('Style', 'edit', 'String', '0', 'Position', [240 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', redTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        greenTag = ['greenTag' j];
        handles.(greenTag) = uicontrol('Style', 'edit', 'String', '0', 'Position', [280 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', greenTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
        blueTag = ['blueTag' j];
        handles.(blueTag) = uicontrol('Style', 'edit', 'String', '0', 'Position', [320 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', blueTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);    
        c = c+a;
    end
        saveas(gcf, figureFileName)
     
    % Sauvegarde de la structure handles (avec les nouveaux champs)
    guidata(hObject, handles);
     
    function okImages_Callback(hObject, event, handles)
     
        a = str2double(get(handles.edit7, 'String'));
        wd = cd();
        figureFileName = [wd '\imgProp.fig'];
        h = hgload(figureFileName);
        arrayInfoImg = cell(a,4); % 4 colonnes : nom, chemin, commentaire, [r v b]
        for i = 1:a
            j = num2str(i);
            % stocke noms des sets
            nomTag = ['nomTag' j];
            arrayInfoImg{i,1} =  get(handles.(nomTag), 'String'); % ne marche pas, renvoie chaine vide..? le texte tapé n'est pas pris en compte?
        % ajouter les autres infos... (nom, commentaire, etc..) 
        end
    A tester... Par contre je comprends pas pourquoi tu utilises HGLOAD ici...

    EDIT : C'est normal que ton GET ne fonctionne pas (il devrait même te renvoyer une erreur à priori) puisque lorsque tu avais créé tes objets tu ne les avaient pas ajouté à la structure handles...
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je vais regarder ca, mais je crois que je commence à comprendre!

    J'utilise le HGLOAd pour charger les handles de la figure enregistrée via pushbutton7_Callback() par la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saveas(gcf, figureFileName)
    Si je supprime cette sauvegarde puis le chargement hgload dans okImages_Callback(), alors, sur clic du pushbutton Ok, le message d'erreur suivant s'affiche dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ??? Reference to non-existent field 'nomTag1'.
     
    Error in ==> Interface2>okImages_Callback at 439
            arrayInfoImg{i,1} =  get(handles.(nomTag), 'String'); % ne marche pas, renvoie chaine vide..? le texte tapé n'est pas pris en compte?
     
    ??? Error while evaluating uicontrol Callback

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Ben disons que dans ton cas ce n'est pas utile de faire comme çà...

    Au final la structure handles est une variable "comme les autres" sauf qu'avec GUIDATA (ou GUIHANDLES) tu la stockes (ou la charge) dans le workspace de la figure (comme tu pourrais faire avec d'autres variables avec les fonctions SET/GETAPPDATA).
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Si j'utilise le code que tu m'as fourni, j'obtiens le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ??? Input argument "handles" is undefined.
     
    Error in ==> Interface2>okImages_Callback at 397
        a = str2double(get(handles.edit7, 'String'));
     
    ??? Error while evaluating uicontrol Callback

    Mon edittext tagué edit7 est dans ma première figure (Interface2) générée en utilisant le guide.
    J'ai expliqué dans mon premier message comment était sensée fonctionner mon interface.

    Le message d'erreur ci-dessus s'affiche même si j'introduis les deux lignes suivantes dans ma fonction okImages_Callback()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        handles=guihandles(gcf);
        guidata(gcf,handles);
    Il semblerait que je n'arrive pas à passer mes handles d'une figure à l'autre...

    Je vais regarder un peu mieux guidata et guihandles et essayer de faire qqchose puis je tiendrai ua courant.

  8. #8
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Citation Envoyé par ontheroadagain Voir le message
    Il semblerait que je n'arrive pas à passer mes handles d'une figure à l'autre...
    Il semblerait que j'ai pas tout compris , tu veux récupérer les données d'une autre interface??

    De plus, l'objet associé à la fonction okImages_Callback est-il créé avec GUIDE ou dans le code? En fait c'est la définition du Callback de cet objet qui n'est pas bon, il devrait valoir:
    Avec GUIDE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Interface2('okImages_Callback',gcbo,[],guidata(gcbo))
    Sans GUIDE, il te faut récupérer ta structure handles avec GUIDATA par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    handles = guidata(hObject);
    et enlever handles dans ton entête de fonction.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Interface 2 générée avec le guide.
    L'autre interface est générée sans guide, par le code contenu dans la fonction pushbutton7_Callback.

  10. #10
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Ok, j'avais pas fait attention mais ca devrait pas poser de problème puisque tous les éléments sont sauvegardés dans la même structure...

    Et donc la solution que je t'ai donné pour le handles n'est pas bonne, il faut plutôt faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function pushbutton7_Callback(hObject, eventdata, handles)
    ...
    guidata(fig, handles);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function okImages_Callback(hObject, event)
    handles = guidata(hObject);
    A tester par contre, je suis pas sur à 100% mais ca devrait être pas trop loin de la vérité...
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    C'est tellement proche de la vérité que ça m'a tout l'air d'y ressembler!

    Le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    % --- Executes on button press in pushbutton7.
    function pushbutton7_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton7 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    a = 180;
    b = str2double(get(handles.edit7, 'String'));
    figureFileName = 'matlab_kmz\imgProp.fig';
    fig = figure('FileName', figureFileName, 'Name', 'Propriétés des jeux d''images', 'Tag', 'imgProp', 'NumberTitle', 'off', 'MenuBar', 'none', 'Color', [0.925 0.914 0.847], 'Position', [360 502 400 a*b+20]);
    movegui(fig,'center')
    c = 5;
    uicontrol('Style', 'pushbutton', 'Position', [290 c 70 22], 'Tag', 'okTag', 'Callback', @okImages_Callback, 'String', 'Ok', 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
       for i = 1:b
            j = num2str(i);
            string = ['** Set ' j];
            setTag = ['setTag' j];
            handles.(setTag)= uicontrol('Style', 'text', 'FontSize', 10, 'Position', [20 c+170 100 20], 'HorizontalAlignment', 'left', 'Tag', setTag, 'String', string, 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
            % nom du set
            handles.StText1(i) = uicontrol('Style', 'text', 'FontSize', 10, 'Position', [80 c+170 40 20], 'HorizontalAlignment', 'left', 'String', 'Nom', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
            nomTag = ['nomTag' j];
            handles.(nomTag) = uicontrol('Style', 'edit', 'String', '', 'Position', [120 c+170 180 20], 'HorizontalAlignment', 'left', 'Tag', nomTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
            % Commentaire
            handles.StText2(i) = uicontrol('Style', 'text', 'FontSize', 8, 'Position', [20 c+115 160 20], 'HorizontalAlignment', 'left', 'String', 'Commentaire (html accepté)', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
            commentTag = ['commentTag' j];
            handles.(commentTag) = uicontrol('Style', 'edit', 'Min', 1, 'Max', 10, 'String', '', 'Position', [20 c+55 360 60], 'HorizontalAlignment', 'left', 'Tag', commentTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
            % Transparence
            handles.StTransp(i) = uicontrol('Style', 'text', 'FontSize', 8, 'Position', [20 c+30 220 20], 'HorizontalAlignment', 'left', 'String', 'Valeurs (R,V,B) du pixel seuil transparence', 'Parent', fig, 'BackgroundColor', [0.925 0.914 0.847], 'ForegroundColor', [0 0 0]);
            redTag = ['redTag' j];
            handles.(redTag) = uicontrol('Style', 'edit', 'String', '0', 'Position', [240 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', redTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
            greenTag = ['greenTag' j];
            handles.(greenTag) = uicontrol('Style', 'edit', 'String', '0', 'Position', [280 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', greenTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);
            blueTag = ['blueTag' j];
            handles.(blueTag) = uicontrol('Style', 'edit', 'String', '0', 'Position', [320 c+30 40 20], 'HorizontalAlignment', 'center', 'Tag', blueTag, 'Parent', fig, 'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0]);    
            c = c+a;
       end
       guidata(fig, handles);
     
     
    function okImages_Callback(hObject, event)
        handles = guidata(gcf);
        a = str2double(get(handles.edit7, 'String'));
        arrayInfoImg = cell(a,4); % 4 colonnes : nom, chemin, commentaire, [r v b]
        handles
        for i = 1:a
            j = num2str(i);
            % stocke noms des sets
            nomTag = ['nomTag' j];
            arrayInfoImg{i,1} =  get(handles.(nomTag), 'String'); % ne marche pas, renvoie chaine vide..? le texte tapé n'est pas pris en compte?
        % ajouter les autres infos... (nom, commentaire, etc..)
        end
        arrayInfoImg{1,1} % afficher 1ere cellule de l'array pour verif
    La solution est bien d'utiliser guidata(fig, handles) pour mettre à jour ma structure handles dans ma première fonction pushbutton7_Callback() puis de charger handles dans la seconde fonction okImages_Callback() en y inscrivant la ligne : handles=guidata(gcf)!

    La solution était donc si "simple"!

    Super. Merci beaucoup Duf pour cette aide précieuse!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Gestion des erreurs : systématiser GOTO 0 dans un handle de sortie?
    Par informer dans le forum VBA Access
    Réponses: 13
    Dernier message: 30/03/2015, 20h26
  2. [Système/Fichiers/API] Shellexecuteex multiple et gestions du/des handle(s)à
    Par Godzestla dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/05/2012, 10h18
  3. Problème gestion des handles axes
    Par sjunod dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 13/07/2010, 13h42
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo