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 :

Pb interaction entre uicontrol


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Pb interaction entre uicontrol
    Bonjour à tous, j'ai un petit soucis d'interaction entre mes VI. Je vous explique mon objectifs: j'affiche 2 image (image originale et image lissée par une gaussienne). Avec un popup, j'arrive à changer l'image affichée. Avec un slider, j'arrive à faire varier la valeur de sigma (donc l'allure de l'image lissée).
    Cependant, quand j'utilise le slider, il me réaffiche mon image par défaut ('5_carres.bmp').
    Je n'arrive donc pas à récupérer le filename définit dans mon popup pour l'utiliser ensuite dans mon slider.
    Il me semble qu'il faudrait utiliser la fonction get à l'intérieur de mon slider mais j'ignore comment.
    Quelqu'un aurait une idée svp ? J'ai cherché toute la soirée une solution mais sans succès...



    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    function ex_uicontrol
     
        clear all
        close all
        clc
     
     
        filename = '5_carres.bmp';
        im=imread(filename);
        im=im2double(im);
        im = rgb2gray(im);
        sigma = 0.2;
        gfilter = fspecial('log', [5 5], sigma);
        im_conv=conv2(im,gfilter);
     
     
        figure('units','normalized','outerposition',[0 0 1 1]);
        subplot(1,2,1);imshow(im);title('Image originale');
        subplot(1,2,2);imshow(im_conv);title('Image lissée');
     
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
        text = uicontrol('Style','text',...
        'Position',[580 400 120 20],...
        'String','Sigma')
     
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
        text2 = uicontrol('Style','text',...
            'Position',[580 300 120 20],...
            'String',num2str(sigma))
     
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
        popup = uicontrol('Style', 'popup',...
               'String', '5_carres.bmp|5_cercles.bmp|lenna.png',...
               'Position', [580 550 100 50],...
               'Callback', {@setfile, filename, sigma, text2});    % Popup function handle callback
                                        % Implemented as a local function
     
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%         
     
     
     
        slider = uicontrol('Style', 'slider',...
            'Min',0,'Max',2,'Value',0.2,...
            'Position', [580 350 240 30],...
            'Callback', {@setsigma, filename, sigma, text2, popup}); 
    					% Slider function handle callback
              % Implemented as a local function
     
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%      
     
    end
     
     
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function setfile(hObj,event, filename, sigma, text2) %#ok<INUSD>
        % Called when user activates popup menu 
        val = get(hObj,'Value');
        if val ==1
            filename = '5_carres.bmp';
        elseif val == 2
            filename = '5_cercles.bmp';
        elseif val == 3
            filename = 'lenna.png';
        end
     
        sigma = 0.2;
     
     
        im=imread(filename);
        im=im2double(im);
        im = rgb2gray(im);
        gfilter = fspecial('log', [5 5], sigma);
        im_conv=conv2(im,gfilter);
        subplot(1,2,1);imshow(im);title('Image originale');
        subplot(1,2,2);imshow(im_conv);title('Image lissée');
     
        set(text2, 'String', num2str(sigma));
     
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function setsigma(hObj,event, filename, sigma, text2, popup) %#ok<INUSL>
     
        sigma = get(hObj,'Value');
     
     
        im=imread(filename);
        im=im2double(im);
        im = rgb2gray(im);
        gfilter = fspecial('log', [5 5], sigma);
        im_conv=conv2(im,gfilter);
        subplot(1,2,1);imshow(im);title('Image originale');
        subplot(1,2,2);imshow(im_conv);title('Image lissée');
     
        set(text2, 'String', num2str(sigma));
     
    end
    Ci-dessous, un aperçu de l'interface pour aider à mieux comprendre mon objectif
    Nom : Capture.PNG
Affichages : 132
Taille : 6,8 Ko

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu utilises des sous-fonctions. Les variables sont donc locales à chaque fonction.

    La sous-fonction setsigma ne prend pas en compte les modification de la variable filename dans la sous-fonction setfile

    Voici une version corrigée qui utilise la technique guihandles/guidata :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    function ex_uicontrol
     
    filenames = {'5_carres.bmp' '5_cercles.bmp' 'lenna.png'};
    sigmaInitValue = 0.2;
     
    fig = figure('units','normalized','outerposition',[0 0 1 1]);
     
    uicontrol('Style','text',...
        'Position',[580 400 120 20],...
        'String','Sigma');
     
    uicontrol('Style','text',...
        'Position',[580 300 120 20],...
        'String', num2str(sigmaInitValue, '%.2f'), ...
        'Tag', 'SigmaText');
     
    uicontrol('Style', 'popup',...
        'String', filenames,...
        'Position', [580 550 100 50],...
        'Callback', @setfile, ...
        'Tag', 'FileList');
     
    uicontrol('Style', 'slider',...
        'Min',0,'Max',2,'Value',sigmaInitValue,...
        'Position', [580 350 240 30],...
        'Callback', @setsigma, ...
        'Tag', 'SigmaSlider');
     
    data = guihandles(fig);
     
    data.filenames = filenames;
    data.numFile = 1;
    data.sigma = sigmaInitValue;
     
    im = imread(data.filenames{data.numFile});
    im = im2double(im);
    im = rgb2gray(im);
    gfilter = fspecial('log', [5 5], data.sigma);
    im_conv = conv2(im,gfilter);
     
    data.axes(1) = subplot(1,2,1);
    title('Image originale');
    data.axes(2) = subplot(1,2,2);
    title('Image lissée');
     
    axis(data.axes, 'off')
     
    imshow(im, 'Parent', data.axes(1));
    imshow(im_conv, 'Parent', data.axes(2));
     
    guidata(fig,data)
     
    end
     
    function setfile(hObj,event)
     
    data = guidata(gcbf);
     
    data.numFile = get(hObj,'Value');
     
    im = imread(data.filenames{data.numFile});
    im = im2double(im);
    im = rgb2gray(im);
    gfilter = fspecial('log', [5 5], data.sigma);
    im_conv = conv2(im,gfilter);
     
    imshow(im, 'Parent', data.axes(1));
    imshow(im_conv, 'Parent', data.axes(2));
     
    set(data.SigmaText, 'String', num2str(data.sigma, '%.2f'));
     
    guidata(gcbf, data);
     
    end
     
    function setsigma(hObj,event)
     
    data = guidata(gcbf);
     
    data.sigma = get(hObj,'Value');
     
    im = imread(data.filenames{data.numFile});
    im = im2double(im);
    im = rgb2gray(im);
    gfilter = fspecial('log', [5 5], data.sigma);
    im_conv=conv2(im,gfilter);
     
    imshow(im, 'Parent', data.axes(1));
    imshow(im_conv, 'Parent', data.axes(2));
     
    set(data.SigmaText, 'String', num2str(data.sigma, '%.2f'));
     
    guidata(gcbf, data);
     
    end
    Voir ce tutoriel : Développement efficace des interfaces graphiques
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Super, c'est exactement ça !

    J'avais effectivement lu ce tuto mais j'avais du mal à saisir le fonctionnement des handles. Là, en me basant sur un programme sur lequel j'ai pu réfléchir moi même, ça m'aide à comprendre plus facilement.

    Un très grand merci !

Discussions similaires

  1. [Language]Interaction entre class
    Par LordBob dans le forum Langage
    Réponses: 10
    Dernier message: 14/12/2005, 10h14
  2. interaction entre mon programme & openOffice
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 10/10/2005, 22h28
  3. [VB .Net][Forms] Interaction entre deux forms
    Par plasticgoat dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/08/2005, 13h14
  4. [Collaboration/Interaction] Peut-on schématiser une interaction entre un bouton de commande et un autre objet ?
    Par manel007 dans le forum Autres Diagrammes
    Réponses: 5
    Dernier message: 21/09/2004, 01h01

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