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 :

Fenetre pop-up de taille variable.


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
    Juin 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut Fenetre pop-up de taille variable.
    Bonjour à tous(tes)

    Je dois réaliser un projet sous simulink, avec une interface graphique afin de permettre à l'utilisateur de rentrer au clavier des paramètres de simulation.

    Note: j'utilise GUI.

    Mon interface se compose d'une fenêtre principale, où il y a 3 boutons. L'utilisateur clique sur le premier bouton, et rentre une série de paramètre, dont le nombre de caneaux, stocké sous la variable N dans le workspace de Matlab grâce à la fonction "assignin"

    L'utilisateur ferme cette fenêtre, et ouvre ensuite la seconde.

    Ma question est donc : est-il possible, que lorsque l'utilisateur ouvre cette deuxième fenetre, il y ait un menu pop-up comportant N choix.
    Par exemple, si N=64 défini dans la prmière fenêtre, peut-on avoir un menu déroulant avec 64 choix, me permettant de paramétrer de façon différente les 64 caneaux ?

    Si cela est effectivement possible, est-il possible d'avoir quelques pistes de réfléxion ?

    Merci d'avance.

    PS: je me suis promené à travers vos tutos et les post deja réalisés, mais je n'ai pas trouvé de réponse s'approchant de ce que je recherche.

  2. #2
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu devrais pouvoir t'en sortir avec FIGURE et UICONTROL.

    Un petit exemple simple:
    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
     
    function [selected_item] = popupdlg(liste_choix)
     
    % Initialisation de la variable de sortie
    selected_item = [];
     
    % Définition de la figure
    fig = figure( ...
        'Units','pixels', ...
        'Position',[0 0 200 50], ...
        'Menubar', 'none', ...
        'Toolbar', 'none', ...
        'DockControl', 'off', ...
        'Numbertitle', 'off', ...
        'CloseRequestFcn', @(obj,evt) LocalClose);
    movegui(fig, 'center');
     
    % Définition du menu
    uicontrol('Parent', fig, ...
        'Style', 'popupmenu', ...
        'String', liste_choix, ...
        'Units', 'pixels', ...
        'Position', [10 20 180 20], ...
        'Callback', @(obj,evt)ObjectSelected(obj));
     
    % Stoppe l'exécution du programme (en attendant UIRESUME)
    uiwait(fig);
     
    % Fermeture de la fenêtre
    delete(fig);
     
        function ObjectSelected(hObject)
     
            % Récupération et stockage dans la variable de sortie de l'indice de l'élément sélectionné
            selected_item = get(hObject, 'Value');
     
            % Relance l'exécution du programme (fermeture de la fenêtre)
            uiresume(fig);
     
        end
     
        function LocalClose
     
            % Relance l'exécution du programme (fermeture de la fenêtre)
            uiresume(fig);
     
        end
     
    end
    Et pour l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    popupdlg({'toto','titi','tata'})
    Il faut bien sur l'adapter à ton besoin...

    Duf

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut
    Merci beaucoup Duf

    C'est à peu près l'idée que j'avais en tête, mais je vais modifier mon programme afin de pouvoir utiliser ce que tu m'as passé.

    Merci encore

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut
    Bonjour à tous(tes).

    J'ai une petite question, c'est pourquoi je me permet de continuer ce topic plutot que de réouvrir un thread.

    Dans mon super programme, au fur et à mesure que l'utilisateur entre des paramètres, ceux-ci sont stockés dans un fichier Excel bien défini, via la commande xlswrite (ca, ca marche nickel ! )

    L'amélioration que je voudrais mettre, c'est ajouter un "edit text" où l'utilisateur marque le nom du fichier, comme ca les valeurs sont stockés dans un fichier que l'utilisateur choisi.

    Voici la chose que je comptais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function edit1_Callback(hObject, eventdata, handles)
    global Nom_Excel
    Nom_Excel=(get(hObject,'String'));
    xlswrite(Nom_Excel, 'Nombre de canaux', 'Initialisation', 'A1');
    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ??? Error using ==> xlswrite at 82
    Filename must be a string
    J'ai bien compris que Matlab préfererais que je lui mette quelque chose de la forme 'Nom_Excel', mais j'ai essayé plusieurs trucs, avec sprintf ou en essayant de convertir le nom, mais rien n'y fait.

    Une petite piste serait la bienvenue

    Merci d'avance
    Bonne journée

  5. #5
    Expert confirmé
    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
    Par défaut
    Je te conseille d'utiliser plutôt UIPUTFILE plutôt qu'un edit avec le risque de faute de frappe que cela suppose

    Et les variables globales c'est mal

  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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Je pense que le problème vient du fait que tu veux effectuer l'action dans le Callback de l'edit ce qui n'est pas une bonne idée à priori car il ne peut récupérer le texte courant de l'edit (ou alors ca implique un peu de bricolage).

    Je te conseillerais plutôt de mettre un bouton à côté qui te permettra de lancer l'enregistrement (et qui récupèrera donc le nom du fichier)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut
    @Caro-Line
    Oui j'ai bien vu que sur le forum l'utilisation des variables globales etait fortement deconseillé, mais j'en utilise plusieurs dans mon programme, me permettant de réutiliser les données dans d'autre callback, et ca marche plutot bien

    @Duf42
    Je vais rajouter un bouton voir si ca marche.

    Mais j'ai cependant une petite question, une variable peut-etre de type String ?
    Je m'explique, si j'ai M='Coucou', si je fait :
    - xlswrite(M,...)
    - xlswrite('Coucou',...)

    Dans les deux cas, Matlab comprend-il qu'il doit créer un fichier Excel avec comme nom Coucou ?

  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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Pour répondre à ta question: Oui, les deux écritures sont équivalentes.

    Celà dit Caro a raison, il vaut mieux utiliser UIPUTFILE ca évite bien des erreurs

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut
    Je suis allé voir la doc de UIPUTFILE, et je suis pas sur que ca réponde trop à mon problème, car il permet juste de créer un fichier (apparament)

    Ce que je souhaite faire, c'est :
    - une zone edit text où l'utilisateur marque le nom du fichier
    - dans la callback de l'edit ( ou de celle d'un bouton associé à l'edit), la feuille excel se crée, et des bouts de texte apparaissent dans des cellules bien définies dans le code.

    Ce que je comptais faire, c'est donc l'utilsateur marque un nom, je stocke ce nom dans une variable et ensuite je fais pleins de Xlswrite, où je remplis petit à petit l'Excel ouvert avec la variable, etc ...

    Voici l'intégralité de la callback de l'edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function edit1_Callback(hObject, eventdata, handles)
    global Nom_Excel
    Nom_Excel=(get(hObject,'String'))
    xlswrite(Nom_Excel, 'Nombre de canaux', 'Initialisation', 'A1');
    xlswrite(Nom_Excel, 'Time_monostable', 'Initialisation', 'A3');
    xlswrite(Nom_Excel, 'MSB', 'Initialisation', 'A5');
    xlswrite(Nom_Excel, 'F_adc', 'Initialisation', 'A7');
    xlswrite(Nom_Excel, 'F_buffer', 'Initialisation', 'A9');
    xlswrite(Nom_Excel, 'Canaux', 'Initialisation', 'J1');
    xlswrite(Nom_Excel, 'LSB', 'Initialisation', 'L1');
    xlswrite(Nom_Excel, 'Gain', 'Initialisation', 'N1');
    Ce que je comprend pas, c'est que Nom_Excel est cencé être une variable de type String, et d'après ce que tu m'as répondu Duf42, xlswrite(M,...) marche si M est de type String, et lorsque je run j'ai cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> xlswrite at 82
    Filename must be a string
    Si vous voyez l'endroit où je ne zape qqch, je suis preneur, parce que je vois pas trop

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 319
    Par défaut
    Citation Envoyé par duf42 Voir le message
    Je pense que le problème vient du fait que tu veux effectuer l'action dans le Callback de l'edit ce qui n'est pas une bonne idée à priori car il ne peut récupérer le texte courant de l'edit (ou alors ca implique un peu de bricolage).
    Pas de soucis normalement : le callback d'une fonction edit est effectuée lorsque l'utilisateur clique sur un autre objet ou tape sur "Entrée". Ce qui nous arrange dans le cas courant, car on ne veut le nom de fichier qu'une fois entièrement tapée. Mais je rejoins vos avis : UIPUTFILE, c'est plus sûr.

    Par contre, j'ai du mal à comprendre pourquoi MatLab renvoie une cellule à la commande EDIT : je viens de comprendre : tu laisses la texte de base du GUI "Edit text" ... dans ses propriétés, cliques sur le bouton sur la ligne "String", et effaces tout, surtout le retour à la ligne Si tu réalises ça, tu n'aura plus besoin de l'opération décrite en-dessous.

    Enfin bref, il te suffit de faire l'opération suivante :

    PS : les variables globales, c'est le grand méchant loup !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut
    Gloire à toi Vampirella, ca marche super

    Me reste plus qu'à régler le fait que la phrase que je veux marquer dans 1cellule se marque dans X cellules, X étant la taille de la phrase, mais ca ca reste du détail ^^

    Pour les variables globales ... la dans cette callback j'utilise Nom_Excel, mais cette variable là je vais l'utiliser dans pleins d'autres callbacks, qui se trouvent dans des GUIs différents, c'est pour cela que je trouve la déclaration en globale assez pratique.

    Que me conseilleriez-vous ?

  12. #12
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 319
    Par défaut
    Citation Envoyé par Zirka Voir le message
    Me reste plus qu'à régler le fait que la phrase que je veux marquer dans 1cellule se marque dans X cellules
    Une des solutions dans ton cas :
    {'mon nom'}


    Si tu utilises tes autres GUI en même temps que tu écris tes fichiers, une des solutions seraient d'aller récupérer le contenu de ton objet "Edit", en trouvant d'abord l'objet associé :
    Je te conseille aussi ce bon tutoriel pour y voir plus clair : http://briot-jerome.developpez.com/m...s/guiefficace/

Discussions similaires

  1. Fenetre pop up taille
    Par marty499 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/05/2009, 12h10
  2. [Débutant][Swing]Fenetres à taille variable
    Par zolotaya dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/07/2007, 12h13
  3. [TP] Tableau de taille variable
    Par Ripley dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 30/01/2006, 15h36
  4. Réponses: 1
    Dernier message: 12/09/2005, 14h31
  5. Comment obtenir un tableau à taille variable ?
    Par marsupilami34 dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 15h03

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