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 :

Changer la vue et la colorbar de façon interactive


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut Changer la vue et la colorbar de façon interactive
    Bonjour,

    J'ai créé une figure. J'aimerais savoir s'il est possible au sein de cette figure de changer la vue et la colorbar de façon interactive (à l'aide d'un slider par exemple)?
    Encore une fois, je pense que la réponse est non étant donné qu'il faudrait relancer le code.
    Je pense cependant avoir trouvé une solution: passer par une interface graphique par GUIDE. Néanmoins, je suis débutant dans Matlab et j'ai peur de ne pas bien comprendre comment ça fonctionne.
    Actuellement, mon code fait tout à fait ce que je souhaite et est complet (excepté pour 1)), je souhaiterais juste rajouter une interactivité. Voici ce que je fais dans mon code:
    1. Import d'un ou plusieurs fichiers txt
    2. Récupération des data du fichier
    3. Plot de la figure à partir des datas
    4. Traitement sur les data pour obtenir certaines statistiques
    D'après ce que je comprends, à la place de faire toutes ces actions dans mon .m, il faudrait que je les fasse au travers du implementation code du gui.
    Je me dis qu'étant donné que j'ai déjà mon code tout prêt, le convertir dans le gui ne me prendra pas trop de temps. Le problème c'est que je suis complétement perdu sur l'utilisation de Guide.
    J'ai lu ce tutoriel : http://briot-jerome.developpez.com/m...es-graphiques/
    Et même si je le comprends, j'ai l'impression que ce n'est pas une introduction assez poussée pour que je puisse l'adapter à mon cas. Avez vous d'autres tutos ou infos à me donner concernant l'utilisation de GUIDE ?

    Merci d'avance!

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Peux-tu nous dire ce qui te bloque dans l'utilisation du GUIDE?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Rebonjour,

    Je vais essayer de décrire ce que je veux faire pas à pas... Je suis certain que ce n'est pas difficile mais étant donné que je m'initie tout juste à l'interface graphique je suis un peu perdu.
    Pour l'instant, j'ai créé un bouton qui me permet d'importer un fichier lorsque je clique dessus.
    Ca marche très bien, lorsque je clique j'ai une fenêtre qui s'ouvre qui me demande de choisir mon fichier etc.
    Cependant, je ne vois rien apparaître dans le workspace de mon .m, Est-ce normal ? Est-ce du au fait que j'utilise une fonction?

    Car ensuite, j'aimerais traiter le fichier que je viens d'importer pour tracer un graphique dans l'interface. J'ai donc compris qu'il fallait que je créée une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % --- Executes during object creation, after setting all properties.
    function axes1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to axes1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: place code in OpeningFcn to populate axes1
    Et là, je bloque. Si je copie la partie de mon code où je trace mon graph sans GUI ça ne marche pas... Sans doute parce qu'il faut préciser des arguments? Ou alors Est-ce du au fait que rien n'apparait dans le workspace et donc que les données que je traite habituellement ne sont pas traitées? Mais j'ai peut être tout faux...

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par Jaderan Voir le message
    Ca marche très bien, lorsque je clique j'ai une fenêtre qui s'ouvre qui me demande de choisir mon fichier etc.
    Cependant, je ne vois rien apparaître dans le workspace de mon .m, Est-ce normal ? Est-ce du au fait que j'utilise une fonction?
    Je ne sais pas, peux tu nous montrer le callback du bouton qui sert à l'importation?

    Citation Envoyé par Jaderan Voir le message
    Car ensuite, j'aimerais traiter le fichier que je viens d'importer pour tracer un graphique dans l'interface. J'ai donc compris qu'il fallait que je créée une fonction:

    Et là, je bloque. Si je copie la partie de mon code où je trace mon graph sans GUI ça ne marche pas... Sans doute parce qu'il faut préciser des arguments? Ou alors Est-ce du au fait que rien n'apparait dans le workspace et donc que les données que je traite habituellement ne sont pas traitées? Mais j'ai peut être tout faux...
    Je n'ai pas bien compris. Tu veux utiliser un deuxième pushbutton pour faire l'affichage?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Tout d'abord merci pour tes réponses.

    Voici le callback du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    [FileName,PathName] = uigetfile('*.txt','Select .txt files', 'MultiSelect', 'on');
    FileName = cellstr(FileName);
    %Number of files selected
    Nb_Files = length(FileName);
    Non, je ne veux pas utiliser de pushbutton pour afficher ma courbe. En fait j'aimerais importer mon fichier et dès que le fichier est importé, je le traite et trace ma courbe automatiquement. Je ne sais pas si c'est plus clair ?

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par Jaderan Voir le message
    Tout d'abord merci pour tes réponses.

    Voici le callback du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    [FileName,PathName] = uigetfile('*.txt','Select .txt files', 'MultiSelect', 'on');
    FileName = cellstr(FileName);
    %Number of files selected
    Nb_Files = length(FileName);
    Non, je ne veux pas utiliser de pushbutton pour afficher ma courbe. En fait j'aimerais importer mon fichier et dès que le fichier est importé, je le traite et trace ma courbe automatiquement. Je ne sais pas si c'est plus clair ?
    C'est plus clair !

    Pour l'instant dans ton callback, tu n'importes pas le(s) fichier(s), tu ne fais que récupérer leur(s) path(s). Il faut que tu utilises une fonction d'importation comme importdata, ou fopen par exemple. Puis tu effectues ton traitement à la suite. Où est le problème?

    PS: si tu dois créer un objet axes, tu peux le faire de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    % Création de l'objet Axes
    axes('units', 'pixels', ...
        'position', [25 40 250 150], ...
        'tag','axes1');
    comme spécifié dans le tutoriel d'Introduction à la programmation des interfaces graphiques de Dut
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Effectivement...
    J'ai donc inséré mon importdata dans le callback et là j'ai une multitude d'erreurs:
    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
    Error using importdata (line 137)
    Unable to open file.
     
    Error in import_2>pushbutton1_Callback (line 107)
        File{n} = importdata(FileName{n});
     
    Error in gui_mainfcn (line 95)
            feval(varargin{:});
     
    Error in import_2 (line 42)
        gui_mainfcn(gui_State, varargin{:});
     
    Error in @(hObject,eventdata)import_2('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
     
     
    Error while evaluating uicontrol Callback
    Je ne peux pas envoyer mon code mais voici sa structure globale:

    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
    %Files selection
    [FileName,PathName] = uigetfile;
    FileName = cellstr(FileName);
    %Number of files selected
    Nb_Files = length(FileName);
     
    %For each file    
    for n=1:Nb_Files
     
        %File import
        File{n} = importdata(FileName{n});
     
        %Passage où j’effectue des operations sur mon File en utilisant txt = getfield(File{n},'textdata');
     
        %J’isole mes data dans une table
        P = getfield(File{n},'data');
     
        % Je trace mon graphique à partir de la table
            [X,Y] = meshgrid(0:(size(P,2)-1),0:(size(P,1)-1));
            surf(X,Y,P);shading interp;
            axis equal;
     
        %Partie où j’effectue diverses operations sur P pour retourner ensuite des scalar que je voudrais afficher dans le GUI
     
    end
    En gros, je veux qu'après avoir cliqué sur mon pushbutton:
    - J'importe un fichier (ou plusieurs, mais pour l'instant on va rester sur un seul )
    - Automatiquement, cela fait certaines opérations sur le txtdata de mon fichier et cela range le data dans une table
    - A partir de la data de la table, je trace un graphique qui apparaît donc avec "axes" dans mon interface
    - Les data sont également traitées pour enregistrer quelques scalar qui sont affichées ensuite dans mon GUI


    Voilà ce que je souhaite faire mais je suis complétement perdu. J'ai bien lu le tutoriel de Dut mais ça ne m'aide pas plus... Parce que je pense que l'exemple donné est trop simple pour que j'arrive à l'adapter à ce que je veux faire.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Pour commencer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for n=1:Nb_Files
        full_path = strcat(PathName,Filename{n}); % ou alors ceci: strcat(PathName,filesep,Filename{n}), à tester.
        %File import
        File{n} = importdata(FileName{n});
     
     
    end
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Cela ne fonctionne pas... mais j'ai compris et corrigé le problème grace à ça!
    En fait, mon import data fonctionnait uniquement si le fichier était dans le même dossier que mon .m
    J'ai corrigé ce problème en insérant tout simplement fullfile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File{n} = importdata(fullfile(PathName,FileName{n}));
    Donc maintenant, j'ai bien tout qui fonctionne! Mon graphe se fait et j'ai mes valeurs en scalar... Il ne me reste donc plus qu'à intégrer tout ça dans mon GUI.
    Pour l'instant ma figure s'ouvre en fenêtre à part. Comment puis-je faire pour l'intégrer dans le GUI ?
    J'imagine qu'il faut que j'utilise "axes" que tu m'as montré tout à l'heure.

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    En effet le fullfile était bien mieux aproprié que mon strcat Je ne sais pas pourquoi, je n'arrive pas à intégrer cette fonction à mon utilisation quotidienne

    Est-ce que ton IHM comporte déjà un objet axes ? Peux tu nous montrer la partie de ton code qui gère l'affichage?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Et moi qui me sentais bien naïf avec mon fullfile

    Oui, il comporte déjà un objet axes.
    Concernant la partie de mon code qui gère l'affichage, je ne sais pas si je comprends bien la question mais elle n'a rien de plus que ce que j'ai déjà montré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [X,Y] = meshgrid(0:(size(P,2)-1),0:(size(P,1)-1));
            surf(X,Y,P);shading interp;
            axis equal;
    Je ne sais pas vraiment où mettre ce code ou comment l'intégrer à mon axes.

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Si ton axes se nomme, par exemple, handles.graph, alors tu peux faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [X,Y] = meshgrid(0:(size(P,2)-1),0:(size(P,1)-1));
            surf(handles.graph,X,Y,P);shading interp;
            axis equal;
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Super! Ca commence à prendre forme, merci.

    Je vais prendre le temps de regarder comment mettre mes scalar dedans etc mais reviendrais surement avec d'autres questions d'ici peu...
    En attendant, en voici d'autres dans lesquelles je me perds un peu:
    1) Je souhaitais initialement permettre à l'utilisateur de changer la valeur de la color bar. Dans mon interface, j'ai intégré le panel colorbar. Y'a-t-il un moyen pour que l'utilisateur puisse changer la color bar (avec un slider par exemple, ou éventuellement une valeur qu'il rentrerait après coup) et que l'effet se remarque "en direct" sur la courbe juste à côté?
    2) Plus un problème de relation entre les différents objets ici: je commence à réfléchir à l'import de mes différents fichiers. Je souhaiterais utiliser un pop-up menu qui permettrait de choisir le fichier importé dont je souhaite tracer le graphe. Je sais comment spécifier les différentes entrées de mon pop-up mais je ne sais pas comment établir la relation entre ce qui est sélectionné dans mon pop-up et ce qui est affiché sur le graph. Des suggestions?

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Citation Envoyé par Jaderan Voir le message
    1) Je souhaitais initialement permettre à l'utilisateur de changer la valeur de la color bar. Dans mon interface, j'ai intégré le panel colorbar. Y'a-t-il un moyen pour que l'utilisateur puisse changer la color bar (avec un slider par exemple, ou éventuellement une valeur qu'il rentrerait après coup) et que l'effet se remarque "en direct" sur la courbe juste à côté?
    Tu as déjà des possibilités en effectuant un click droit sur la colormap puis choisissant "Interactive colormap shift" ou "Open colormap editor". Est-ce que cela pourrait te convenir? Ou sinon, peux tu préciser ce que tu entends par "changer la colorbar" spécifiquement? Changer la colormap de ta figure?

    Citation Envoyé par Jaderan Voir le message
    2) Plus un problème de relation entre les différents objets ici: je commence à réfléchir à l'import de mes différents fichiers. Je souhaiterais utiliser un pop-up menu qui permettrait de choisir le fichier importé dont je souhaite tracer le graphe. Je sais comment spécifier les différentes entrées de mon pop-up mais je ne sais pas comment établir la relation entre ce qui est sélectionné dans mon pop-up et ce qui est affiché sur le graph. Des suggestions?
    Il est assez facile de définir une corrélation entre le popup et le fichier à utiliser. Encore faut-il entrer les noms de tes fichiers dans le popup de façon réfléchie. Peux-tu nous décrire comment tu comptes procéder et à quel endroit tu bloques spécifiquement? Il y a en réalité plusieurs façon de faire, donc ça dépend essentiellement de comment tu conçois le problème de base.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Merci pour la colorbar, ça me convient !

    Pour le reste, je ne sais pas être plus spécifique sur mes problèmes car malheureusement je ne vois pas du tout par où commencer. J'essaye d'expliquer ce que je veux faire:
    1) Une fois mes fichiers importés à l'aide du bouton, je veux remplir le pop up menu des noms des fichiers
    2) Je souhaite c'est qu'en changeant le nom dans le pop-up, ça me trace le graphique propre au nom du fichier.
    Je pense donc qu'en fait, à la place de faire mon graphique dans le callback du pushbutton, je vais les faire dans les case de mon menu pop up. Il faudrait donc que mon pushbutton renvoie les noms des fichiers pour que je puisse les inscrire dans le pop up menu et qu'ensuite, à partir de la sélection de l'utilisateur, je trace le graphique approprié.
    Je ne sais pas comment faire ça...

    Enfin, une nouvelle question, j'ai créé un object table dans lequel je souhaite mettre des scalar que j'ai calculés. Le tag de ma table est uitable et je souhaite remplir ce uitable avec mes data. J'ai donc fait le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    values_data = { bla bla bla   };
    t = handles.uitable('Data', values_data);
    Mais cela me retourne une erreur:
    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
    Error using subsindex
    Function 'subsindex' is not defined for values of class 'cell'.
     
    Error in import_2>pushbutton1_Callback (line 324)
        t = handles.uitable('Data', values_data);
     
    Error in gui_mainfcn (line 95)
            feval(varargin{:});
     
    Error in import_2 (line 42)
        gui_mainfcn(gui_State, varargin{:});
     
    Error in @(hObject,eventdata)import_2('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
     
     
    Error while evaluating uicontrol Callback
    Je me dis que j'appelle mal ma table?

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Pour le uitable, utilises la fonction set:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.uitable,'Data',values_data);
    Pour le popup, une fois que tu as récupérer la liste de nom de fichier, tu vas pouvoir les mettre dans ton popup comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.monPopup,'String',FileName);
    Puis dans le callback de ton popup tu auras quelque chose de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idx_current_file = get(hObject,'Value'); %numéro du fichier à traiter
    % et le fichier choisi sera donc File{idx_current_file}
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ta réponse encore une fois.

    J'ai encore quelques problèmes, même si j'avance beaucoup grâce à toi. Etant donné que c'est la première fois que je me penche là dessus, mes questions doivent paraître un peu lourdes mais c'est juste le temps que je comprenne comment ça marche.
    Pour les set de l'uitable et de popup ça a très bien marché sauf que... je n'ai qu'un nom de fichier dans mon popup et seule la première colonne du pop up est remplie.

    Pour résumer ce que j'ai à présent et ce que je voudrais avoir:
    1) Quand je clique sur mon push button, je sélectionne plusieurs fichiers
    2) J'ai une boucle for qui va du premier fichier au denier qui permet de les traiter pour en faire sortir des valeurs (disons, values_data{n})
    3) J'aimerais que dans mon set(handles.uitable), je remplisse un values_data{n} par colonne...
    4) Pareil pour le popup menu, il faudrait que tous les noms de fichiers apparaissent dedans et pour le moment je n'ai que le dernier.

    Concernant le callback de mon pop up pour tracer la courbe en fonction du nom de fichier sélectionné:
    Merci pour ta ligne de code, je vois à quoi elle va me servir mais j'ai l'impression d'être bloqué même avant ça.
    En gros, il faudrait que suite à ta ligne de code où j'appelle le fichier en fonction de son identifiant, je mette le code qui me permet de tracer la courbe, c'est bien ça ?
    J'ai essayé de faire ça mais bien sûr, toutes mes données sont traitées dans le callback de mon pushup buttons, vu que c'est là que j'importe mes fichiers et que je les organise. Voici à quoi le code du callback ressemble:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    idx_current_file = get(hObject,'Value'); 
    
            P = getfield(File{idx_current_file},'data');
    
            [X,Y] = meshgrid(0:(size(P,2)-1),0:(size(P,1)-1));
            
            surf(handles.axes1,X,Y,P);
    Evidemment, il me met une erreur disant que la variable File est inconnue.

    Comment Est-ce que je peux faire pour communiquer des variables issues du callback du pushbutton au callback du popup?

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Concernant le contenu de ton popup, peux tu nous montre le contenu de la variable que tu lui envoies via un point d'arrêt? (i.e. que contient la variable FileName?)

    Pour transmettre des variables d'un bouton à l'autre, je te conseille d'utiliser la fonction guidata comme expliquée ici.

    Exemple, après la récupération de tes fichiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    handles.myfiles = Fichier;
    guidata(hObject,handles);
    Ta variable sera accessible dans les autres callback via handles.myFiles
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup !
    Plutôt que d'utiliser guidata, j'ai déclaré en variable globale et ça marche très bien. (y'a t-il une raison pour préférer guidata à global?)

    Je n'ai donc plus que mes deux problèmes concernant le remplissage de mon tableau et de ma pop up.
    Concernant le contenu de la variable, il s'agit de FileName{n}, donc j'ai un nom de fichier par colonne rangé sur une ligne. Ce que je voudrais donc c'est un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set(handles.monPopup,'String',FileName{1}
    FileName{2} 
    FileName{3} etc );
    Sachant que je ne connais pas le nombre de n à l'avance (il est défini par le nombre de fichiers que je sélectionne. Est-ce plus clair?

    Pour le tableau, c'est plus ou moins le même problème. J'ai values_data{1}, values_data{2} etc et ranger un de chaque dans une colonne à chaque fois.

  20. #20
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Pourquoi les handles? Voir le même tutoriel

    Pour le popup menu, si tu lui envoie un vecteur de cellules contenant des string, il va directement les ranger ligne par ligne.

    Pour les tables, je ne sais pas trop comment elles fonctionnent, si tu ne trouves pas je jetterai un oeil.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

Discussions similaires

  1. [RCP]Comment changer de vue avec mon plugin ?
    Par Cpt Anderson dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 15/12/2010, 12h43
  2. BIG HELP : changer de vue
    Par romeo9423 dans le forum MFC
    Réponses: 2
    Dernier message: 19/05/2007, 19h23
  3. changer de vue et de doc
    Par LesLemmings dans le forum MFC
    Réponses: 10
    Dernier message: 07/05/2007, 12h02
  4. Réponses: 7
    Dernier message: 03/03/2006, 17h44
  5. SDI - changer de vue en cliquant sur un bouton
    Par Psykotik dans le forum MFC
    Réponses: 3
    Dernier message: 29/11/2005, 16h09

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