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 :

Codage d'interface graphique


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Par défaut Codage d'interface graphique
    Bonjour à tous,

    Je suis en train de m'essayer à coder une interface graphique avec matlab avec comme base le tutoriel que j'ai trouvé sur ce forum. Il se trouve que je n'ai pas tout compris.

    But :
    Mon objectif est d'avoir une interface graphique pour pouvoir faire une série de calcul et d'en afficher les résultats (graphiques) sur ladite interface graphique.
    Pour cela, je rentre des paramètres de calcul, je clique sur le bouton calcul et mais graphe s'affiche.

    Mon problème :
    Pour le moment je n'en suis même pas au graphes. Mon premier problème réside dans la récupération des données.

    Mon code :
    Comme je ne peux pas mettre mon code donc vais écrire un exemple ayant la même structure

    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
     
    function gui_thermocap
     
    global x handles
     
    %%% Création de l'objet Figure
    handles(1)=figure('units','pixels',...
        'position',[250 250 500 500],...
        'color',[0.1 0 0.8],...
        'numbertitle','off',...
        'name','test_gui',...
        'menubar','none',...
        'tag','interface');
     
    %%%% Selection des parametres
     
    % Création de l'onglet Paramètres
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.96 0.2 0.03],...
        'string','Paramètres');
     
    % Création de l'objet x1
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.05 0.92 0.1 0.03],...
        'string','x1');
     
    % Création de la valeur x1
    handles(4)=uicontrol('style','edit',...
        'units','normalized',...
        'position',[0.25 0.92 0.1 0.03]);
     
    % Création de l'objet x2
    handles(5)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.05 0.92 0.1 0.03],...
        'string','x2');
     
    % Création de la valeur x1
    handles(6)=uicontrol('style','edit',...
        'units','normalized',...
        'position',[0.25 0.92 0.1 0.03]);
    ...
     
    % Création de l'objet calcul
    handles(23)=uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[0.15 0.52 0.1 0.03],...
        'string','Calcul',...
        'callback',@calcul,...
        'tag','buttoncalcul');
     
    % enregistrement
    data.x1=x1;
    data.x2=x2;
    guidata(gcf,data)
     
    function calcul(objet,event)
     
    global x1 x2 handles
     
    data=guidata(gcbf);
    x1=data.x1;
    x2=data.x2;
    nb_pts=40;
    if x1==x2
        r=x1;
    else
        r=linspace(x1,x2,nb_pts);
    end
    Le problème avec cette syntaxe c'est que matalab essai toujours d'exécuter l'instruction linspace même si je rentre des valeurs de x1 et x2 identiques. Je suppose que le soucis vient de la récupération des données.

    J'ai aussi une autre questions concernant les arguments de la fonction calcul, à savoir objet et event. A quoi correspondent-ils ?

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    ingénieur
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Salut,
    En effet, dans ton code, tu ne récupères pas les valeurs que tu entres dans tes champs de ton interface graphique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    % Création de l'objet x1
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.05 0.92 0.1 0.03],...
        'string','x1');
    % Création de la valeur x1
    handles(4)=uicontrol('style','edit',...
        'units','normalized',...
        'position',[0.25 0.92 0.1 0.03]);
    '% Création de l'objet x1'
    Ce code ne crée pas d'objet x1, il crée un objet graphique que tu peux appeler x1, comme tu pourrais l'appeler vitesse, distance, frequence... mais en aucun cas cela ne créera de variable au nom de ton texte dans le code matlab.

    '% Création de la valeur x1'
    Comme au dessus, ce code ne crée pas la valeur, ni la variable x1.
    Il crée un champ ou tu peux saisir une donnée. après il faut attribuer cette saisie de donnée à ta variable.

    donc Si tu fais data.x1 = x1; doit te créer une erreur à la compilation car x1 n'a pas été définit.

    de plus, lancer des calculs a la suite de la déclaration de tes objets graphiques n'est pas correct : l'utilisateur n'a pas eu le temps de remplir les champs !
    tu as 2 solutions :

    1) mettre a jour toutes tes variables sur l'appui du bouton calcul, ce que tu sembles vouloir obtenir avec ton code.
    2) mettre a jour la variable x1 dès qu'elle est renseignée

    voici une solution 1) qui devrait marcher, je suis débutant mais je pense qu'il n'y a pas que du faux :

    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
     
    function calcul(objet,event)
     
    % global x1 x2 handles inutile
    % data=guidata(gcbf); %guidata
     
    x1 = get(handles(4),'String');
    x2 = get(handles(6),'String');
     
    nb_pts=40;
    if x1==x2
        r=x1;
    else
        r=linspace(x1,x2,nb_pts);
    end
    Si tu voulais mettre a jour tes champs x1 et x2 dans le code directement (et pas aller les chercher à l'appel de calcul) voici une solution : l'appel de callback dès que la valeur est mise à jour:
    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
    % création du champ de saisie de x1
    handles(4)=uicontrol('style','edit',...
        'units','normalized',...
        'position',[0.25 0.92 0.1 0.03],'callback',@x1edit_callback);
    ...
    function x1edit_callback (source,~)
        x1 = str2double(source.String); % ou get(source,'String'); peut-être ? à tester
    end
    
    ...
    function calcul(...)
     if x1 == x2
        ...
    else ...
    ...
    end
    Concernant objet et event, je te conseille de regarder l'aide de matlab ou les tutoriaux sur le site (http://briot-jerome.developpez.com/m...es-graphiques/)

    A+

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Par défaut
    Merci pour ta réponse précise. Je vais essayer les deux solutions que tu proposes. Je te tiendrais au courant du résultats.

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2004, 18h29
  2. interface graphique utilisateur, que faut-il utiliser?
    Par Missvan dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/03/2004, 12h18
  3. Application multiplateforme avec interface graphique
    Par TNorth dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 31/01/2004, 18h55
  4. [Kylix] Interface graphique pour lognes de commande linux
    Par lecharcutierdelinux dans le forum EDI
    Réponses: 6
    Dernier message: 29/08/2003, 10h20
  5. plugin interface graphique
    Par jocelyn dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/08/2003, 09h49

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