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 :

Récupérer l'indice d'un handle - Pushbutton et popup


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 26
    Par défaut Récupérer l'indice d'un handle - Pushbutton et popup
    Bonjour,

    Je débute dans la création d'interface graphique utilisateur, alors je me suis aidé des tutoriaux très bien réalisés par Jérôme Briot. Je suis notamment parti de cette page, avec la partie "gui_var_globales".

    Situation
    Mon code est assez structuré : par ligne sur l'interface. La ligne 1 de l'interface sert à choisir un workpath. Les lignes 2 à 5 permettraient de choisir le jour et le mois, je récupèrerais ensuite ces valeurs pour concaténer des fichiers contenant des valeurs à traiter (en l'occurrence, pour l'éolien donc des vitesses etc.). Le traitement est en partie réalisé, avec d'ailleurs à la base un programme rempli de prompt pour récupérer les valeurs des jours/mois, mais j'aimerais présenter cela de façon plus automatisée, une réelle interface utilisateur.

    Probleme
    Dans le fichier de Jérôme, j'ai ajouté de nombreux handles pour que l'interface soit plus complète (jusqu'à 20). J'aimerais que les fonctions "ajouter" et "retrancher" fonctionnent sur plusieurs handles, donc il faudrait que je récupère l'indice du handle qui sollicite la fonction en question pour que cette dernière agisse sur un autre handle. Hum, je vais être plus clair à la fin du post. Voici une partie du code :

    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
     
    %% Fonction Principale
     
    function gui_var_globales
     
    % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction
    % nCompteur : valeur courante du compteur (scalaire)
    % handles : identifiants des objets graphiques (vecteur)
    global nCompteur handles
    global nCompteur1 handles
    global nCompteur2 handles
    global nCompteur3 handles
    global nCompteur4 handles
    global PathName handles
    global nbhandles handles
     
    % Initialisation de la variable représentant la valeur courante du compteur nCompteur à 0
    nCompteur=1;nbhandles=1;nCompteur1=1;nCompteur2=1;nCompteur3=1;nCompteur4=1;
     
    %% Création de l'objet Figure
    handles(1)=figure('units','pixels',...
        'position',[250 250 800 250],...
        'color',[0.925 0.913 0.687],...
        'numbertitle','off',...
        'name','[GUI] Utilisation des variables globales',...
        'menubar','none',...
        'tag','interface'); 
     
    %% Ligne choix du répertoire
    % Texte ---------------------------------------
    handles(2)=uicontrol('style','text',... 
        'units','normalized',...
        'position',[0.25 0.88 0.74 0.1],...
        'string','Répertoire en cours...',...
        'tag','PathName'); 
    % PushButton ----------------------------------
    handles(3)=uicontrol('style','pushbutton',... 
        'units','normalized',...
        'position',[0.02 0.88 0.2 0.1],...
        'string','Répertoire',...    
        'callback',@repertoire,...
        'tag','repertoire'); 
     
    %% Ligne choix du jour de début
    % Texte ---------------------------------------
    handles(4)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.02 0.75 0.2 0.1],...
        'string','Jour du début',...
        'tag','Jourdébut'); 
    % Texte du résultat ---------------------------
    handles(5)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.25 0.75 0.3 0.1],...
        'string','1',...
        'tag','resultat'); 
    % Pushbutton - --------------------------------
    handles(6)=uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.57 0.75 0.2 0.1],...
        'string','-',...    
        'callback',@retrancher,...
        'tag','bouton-'); 
    % Pushbutton + --------------------------------
    handles(7)=uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.79 0.75 0.2 0.1],...
        'string','+',...    
        'callback',@ajouter,...
        'tag','bouton+'); 
     
    %% Ligne choix du mois de début
    % Texte ---------------------------------------
    handles(8)=uicontrol('style','text',... 
        'units','normalized',...
        'position',[0.02 0.63 0.2 0.1],...
        'string','Mois du début',...
        'tag','Moisdébut'); 
    % Texte du résultat ---------------------------
    handles(9)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.25 0.63 0.3 0.1],...
        'string','1',...
        'tag','resultat'); 
    % Pushbutton - --------------------------------
    handles(10)=uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.57 0.63 0.2 0.1],...
        'string','-',...    
        'callback',@retrancher,...
        'tag','bouton-'); 
    % Pushbutton + --------------------------------
    handles(11)=uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.79 0.63 0.2 0.1],...
        'string','+',...    
        'callback',@ajouter,...
        'tag','bouton+');
    Puis à la fin les fonctions :
    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
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %DEBUT DE LA SOUS-FONCTION RETRANCHER%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function retrancher(obj,event)
     
    % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction
    % nCompteur : valeur courante du compteur (scalaire)
    % handles : identifiants des objets graphiques (vecteur)
    global nCompteur handles
    global nbhandles handles
     
    nbhandle=obj;
    nbhandles=fix(nbhandle)-1
     
    % Diminution de la valeur de nCompteur
    if nCompteur==1
        nCompteur=nCompteur;
    else
        nCompteur=nCompteur-1;
    end
     
    % Actualisation de la propriété String de l'objet Uicontrol Text résultat
    set(handles(nbhandles),'string',num2str(nCompteur));
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %FIN DE LA SOUS-FONCTION RETRANCHER%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %DEBUT DE LA SOUS-FONCTION AJOUTER%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function ajouter(obj,event)
     
    % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction
    % nCompteur : valeur courante du compteur (scalaire)
    % handles : identifiants des objets graphiques (vecteur)
    global nCompteur handles
    global nbhandles handles
     
    nbhandle=obj;
    nbhandles=fix(nbhandle)-2
     
    % Augmentation de la valeur de nCompteur
    if nCompteur==12
        nCompteur=nCompteur;
    else
        nCompteur=nCompteur+1;
    end
     
    % Actualisation de la propriété String de l'objet Uicontrol Text résultat
    set(handles(nbhandles),'string',num2str(nCompteur));
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %FIN DE LA SOUS-FONCTION AJOUTER%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function repertoire(obj,event)
     
    global PathName handles
    PathName = uigetdir;
    %[FileName,PathName] = uigetfile('*.sta','Sélectionnez les fichiers texte', 'MultiSelect', 'on');
    %cd(PathName);
     
    set(handles(2),'string',PathName);
    Et voici l'interface :
    Nom : Interface.png
Affichages : 819
Taille : 1,06 Mo


    En fait, les boutons + et - doivent modifier le texte de la même ligne... Il doit y avoir un moyen simple, je pense que c'est assez "bricolage" mais bon.

    Le mieux serait même d'ajouter une ligne de plus à la fin avec un récapitulatif : "Période du [jj.mm.yyyy] au [jj.mm.yyyy]".

    A noter que dans la suite du programme, j'incrusterai d'autres handle du style pushbutton "Rose des vents", et lors du lancement une courbe de Rose des vents s'afficherait, avec toutes les données des fichiers de la période choisie précédemment. Le problème est donc le passage à la partie interface.

    J'espère avoir été clair...
    Et j'espère que vous m'aiderez pour cette simple manipulation qui me bloque depuis un bon nombre d'heures !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    global nCompteur handles
    global nCompteur1 handles
    global nCompteur2 handles
    global nCompteur3 handles
    global nCompteur4 handles
    global PathName handles
    global nbhandles handles
    Une seule déclaration suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if nCompteur==1
        nCompteur=nCompteur; % Inutile
    else
        nCompteur=nCompteur-1;
    end
    Simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if nCompteur~=1
        nCompteur=nCompteur-1;
    end
    Attention à nbhandle=obj;Regarde ce que contient obj
    Tu veux je pense plutôt faire nbhandle=find(handles==obj);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 26
    Par défaut
    Merci Jérôme (Briot ?) !

    C'est exactement ce que je cherchais, ma formule était un brouillon en fait, je me doutais qu'il fallait utiliser un "obj" mais celui-ci ne donnait qu'une chaîne vide. J'ai laissé cette ligne dans le code en sachant qu'elle ne fonctionnait pas.

    Question : N'y a-t-il pas plus simple que de créer 20 handles ? En fait je vais sûrement ajouter l'année, alors si je le place après le mois de début soit "handles(12)", il faut que je décale tous les suivants de +1 ? Ou alors, si le dernier est "handles(20)", je peux créer un "handles(21)" et le placer au début ? Il ne s'agit que d'un indice ? Si oui d'ailleurs, handles serait une matrice colonne au final ? J'ai pas bien saisi...

    Sinon j'ai bien avancé ce soir (à mon allure quand même), et j'en suis arrivé au traitement de données. Comme dit précédemment, il s'agit de nombreux fichiers de valeurs à traiter. Plus précisément, toutes les 12 heures un fichier est créé, avec une matrice du style 80x60. Avec le code précédent j'arrive à charger tous les fichiers et réunir toutes les valeurs dans une seule matrice. Maintenant, j'ai un autre problème au niveau de l'interface, et je n'arrive pas à trouver une solution sur le net. Sur la nouvelle interface (photo ajoutée demain), la dernière ligne est "lancer le chargement des fichiers", et à ce moment la matrice qui réunit toutes les valeurs est créée : "fichiertotal".

    Question : J'aimerais faire apparaître une autre interface grâce à un bouton push, sur laquelle il ne s'agira que du traitement des valeurs de la matrice "fichiertotal". Il sera possible de sélectionner par exemple "Rose des vents", et une figure apparaîtra avec la courbe. Je souhaite séparer l'interface "Choix de la période à étudier" et "Traitement des valeurs", et pouvoir switcher entre les deux grâce à un bouton poussoir... Est-ce possible déjà ? Ce serait l'équivalent d'un pop-up, mais qui au lancement fermerait l'autre interface. Ensuite je pourrais revenir à l'autre interface avec "la fonction inverse".

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Garceti Voir le message
    Merci Jérôme (Briot ?) !
    Perdu! Ça c'est Dut.

    Citation Envoyé par Garceti Voir le message
    Question : N'y a-t-il pas plus simple que de créer 20 handles ?
    Tu penses à quoi exactement? Il te faudra autant de ligne uicontrol(...) et donc de handle créé par objet.
    De là je pense que tu peux peut-être alléger le code en créant une boucle/fonction contenant les 3 objets Text | Pushbutton - | Pushbutton + qui fait varier les noms et positions.
    Citation Envoyé par Garceti Voir le message
    pouvoir switcher entre les deux grâce à un bouton poussoir... Est-ce possible déjà ? Ce serait l'équivalent d'un pop-up
    Voir cette discussion sur les onglets.
    Citation Envoyé par Garceti Voir le message
    mais qui au lancement fermerait l'autre interface. Ensuite je pourrais revenir à l'autre interface avec "la fonction inverse".
    Alors c'est à moi de poser une question: qu'entends-tu par "fermer"?
    • Fermer complètement la figure, quitter la fonction. Dans ce cas, un simple close(handleFigure) et appel à la nouvelle Interface.
    • Simplement la rendre invisible: set(handleFigure,'Visible','on') / set(handleFigure,'Visible','off')
    Dernière modification par Invité ; 22/02/2012 à 02h14.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 26
    Par défaut
    Ah oui, en plus j'avais lu sur ses tutoriaux "Jérôme Briot (Dut)"... Il est tard on va dire, petit oubli...

    Pour le nombre de handles
    Je n'avais pas vraiment d'idée, j'avais essayé d'utiliser l'outil guide mais comme le dit Dut, c'est compliqué de s'adapter au code créé par cet outil... Il vaut mieux créer le sien, et apprendre manuellement à créer ses interfaces. Mais l'outil guide était beaucoup plus succinct pour une interface similaire, avec autant d'objets graphiques. Alors je me disais qu'il existait peut-être une autre technique.
    Créer autant de handle qu'il faut de uicontrol me convient parfaitement autrement, c'est pour ceux qui voudront modifier mon code : ça va être plus long à décrypter/modifier je pense.

    Pour le changement d'interface
    C'est vrai que les onglets sont en fait ce que j'imaginais, j'étais parti dans la voie "bricolage" encore...
    D'ailleurs, on sait jamais, pour moi les onglets sont le menu qu'on peut ouvrir grâce à une barre en haut, on peut switcher d'interface comme les menus "fichier" ou "outil" habituels. Du coup quand je disais fermer, cela reprend ce principe : le pushbutton ouvrirait l'interface(2) tandis qu'en même temps, l'interface(1) se ferme (close). Sur l'interface(2) un pushbutton serait aussi présent pour ouvrir l'interface(1), et fermer l'interface(2). Quand je disais "bricolage" hein...

    Question
    Comment faire apparaître une pop-up grâce à un pushbutton ? Il est possible que des fichiers manquent, alors je veux les enregistrer dans une matrice de string. Un pushbutton serait disponible pour lancer un "pop-up", une fenêtre qui contient la liste des fichiers manquants.


    Merci pour ces réponses rapides !
    J'essaierai tout ça demain, je vais dormir pendant les 4h qu'il me reste quand même.

    Bonne nuit.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Garceti Voir le message
    Ah oui, en plus j'avais lu sur ses tutoriaux "Jérôme Briot (Dut)"... Il est tard on va dire, petit oubli...
    On va dire ça

    Comme pour une interface normale, il te suffit de mettre le code (ou la fonction) créant le pop-up dans la fonction Callback de ton Pushbutton.

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

Discussions similaires

  1. récupérer les indices d'un partil_sort_copy
    Par keng83 dans le forum SL & STL
    Réponses: 1
    Dernier message: 24/10/2007, 21h00
  2. [Tableaux] Récupérer l'indice d'un tableau
    Par emageren dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 10h21
  3. récupérer l'indice de la ligne séléctionner d'une MSFlexGrid
    Par awatif dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/09/2006, 12h50
  4. Récupérer l'indice d'une valeur donnée dans un select
    Par mgemc2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/08/2006, 11h31
  5. Comment récupérer l'indice dans un TdxTreeList ?
    Par claude dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2004, 15h17

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