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 :

GUI je ne comprends rien aux callbacks et handles [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut GUI je ne comprends rien aux callbacks et handles
    Bonjour,
    j'ai beau decortiquer des scripts, je n'arrive pas à créer l'interface graphique (simple?) suivante:

    une fenetre + 1 slider: en faisant glisser le slider, on change la pente de la droite affichée ou la fréquebnce du sinus affiché.

    Je trouve des scripts pour zoomer, changer les échelles, faire defiler une liste...mais rien sur le fait de faire intervenir les valeurs du slider en temps réel sur l'affichage d'une courbe.

    Qq'un peut-il me GUIder sur le script d'un tel exemple? je suis perdu avec les handles, les callbacks, les get, les set...

    Vraiment merci d'avance! (celà fait des années que j'utilise Matlab et je peux pas rester dans l'ignorance du GUI, "c'est pa' possib'!".

  2. #2
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    salut
    as-tu regardé les tutoriels car ils expliquent bien les différentes manières de gérer les callback.

    [edit] : voilà un code que je te conseille de ne lire qu'après avoir bien compris et cherché. je ne l'ai pas commenté
    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
    function gui_example
     
    pente = 1;
    freq = 1;
     
    hfig=figure;
    axes('parent', hfig,...
        'units', 'normalized', 'position', [0.1 0.3 0.8 0.6],...
        'tag', 'axes');
    uicontrol('style', 'slider',...
        'units', 'normalized', 'position', [0.4 0.175 0.2 0.075],...
        'Min',-1, 'Max', 1, 'Value', pente,...
        'callback', @(src, evnt)sld_pente_cb(src), 'tag', 'sld_pente');
    uicontrol('style', 'slider',...
        'units', 'normalized', 'position', [0.4 0.05 0.2 0.075],...
        'Min',1, 'Max', 10, 'Value', freq,...
        'callback', @(src, evnt)sld_freq_cb(src),  'tag', 'sld_freq');
     
    handles = guihandles(hfig);
     
    t = -1:1/(30*freq):1;
    droite = pente*t;
    sinusoide = sin(2*pi*freq*t);
     
    handles.plot=plot(handles.axes, t, droite, t, sinusoide);
     
    guidata(hfig, handles);
     
    function sld_pente_cb(src)
    handles = guidata(src);
    droite = get(src, 'Value')*get(handles.plot(1),'XData');
    set(handles.plot(1), 'YData', droite);
     
    function sld_freq_cb(src)
    handles = guidata(src);
    freq =  get(src, 'Value');
    t = -1:1/(30*freq):1;
    sinusoide = sin(2*pi*freq*t);
    set(handles.plot(2), 'XData', t, 'YData', sinusoide);
    les sliders ne sont pas temps réels car ils ne le sont pas avec Matlab par défaut.
    Il existe plusieurs solutions pour faire des sliders temps réels mais si tu te perds déjà dans les set et get il vaut mieux y aller doucement.

    [edit2] en fait dans ce cas précis (sans autre affichage) on peut même se passer des techniques usuelles pour les interfaces graphiques en utilisant simplement un passage de paramètre
    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
    function gui_example
     
    pente = 1;
    freq = 1;
     
    t = -1:1/(30*freq):1;
    droite = pente*t;
    sinusoide = sin(2*pi*freq*t);
     
     
    hfig = figure;
    haxes = axes('parent', hfig,...
        'units', 'normalized', 'position', [0.1 0.3 0.8 0.6]);
     
    hplot=plot(haxes, t, droite, t, sinusoide);
     
    uicontrol('style', 'slider',...
        'units', 'normalized', 'position', [0.4 0.175 0.2 0.075],...
        'Min',-1, 'Max', 1, 'Value', pente,...
        'callback', @(src, evnt)sld_pente_cb(src, hplot));
    uicontrol('style', 'slider',...
        'units', 'normalized', 'position', [0.4 0.05 0.2 0.075],...
        'Min',1, 'Max', 10, 'Value', freq,...
        'callback', @(src, evnt)sld_freq_cb(src, hplot));
     
     
    function sld_pente_cb(src, hplot)
    droite = get(src, 'Value')*get(hplot(1),'XData');
    set(hplot(1), 'YData', droite);
     
    function sld_freq_cb(src, hplot)
    freq =  get(src, 'Value');
    t = -1:1/(30*freq):1;
    sinusoide = sin(2*pi*freq*t);
    set(hplot(2), 'XData', t, 'YData', sinusoide);

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Merci mille fois!
    Merci pour cet exemple extra-clair! Comme quoi, lorsqu'on est débutant, il vaut mieux ne pas se laisser séduire par les sirènes du GUI. Il y a de quoi être un peu furax devant le manque de pedago de certains tutos, soi-disant destinés aux debutants. Avec cet exemple clair, j'arrive à raccrocher les wagons avec d'autres scripts. Le bonheur quoi! merci mille fois!

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

Discussions similaires

  1. J'y comprend rien aux modules
    Par PadawanInPerl dans le forum Modules
    Réponses: 2
    Dernier message: 15/02/2010, 11h13
  2. cx_oracle : je comprends rien aux dates
    Par ustilago dans le forum Bibliothèques tierces
    Réponses: 4
    Dernier message: 14/01/2008, 13h28
  3. Positionnement CSS, j'comprends rien !!
    Par guano dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 16/01/2006, 16h40
  4. error : does not name a type // je n'y comprends rien
    Par djobanaille dans le forum C++
    Réponses: 6
    Dernier message: 19/11/2005, 10h25
  5. [MX]boutons...j'y met du mien mais j'comprend rien!
    Par skapull dans le forum Flash
    Réponses: 5
    Dernier message: 25/03/2004, 18h55

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