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 :

Comment faire une interface GUI comme celle ci ? (voir sujet)


Sujet :

Interfaces Graphiques

  1. #41
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai testé plusieurs truc, en mettant des handles avant après, sans avec mais a chaque fois il y a quelque chose qui plante.

    Je mets le minimum en pièces jointes, l'erreur se passe dans l'onglet 3 lorsque l'on bouge les sliders.

    Ce que j'essaye de faire c'est de séparer les actions des sliders, les 2 premiers mette a jour une valeur qui est rapidement calculer alors que le 3 ème demande beaucoup plus de calcul donc je l'ai séparé pour qu'on puisse faire glisser les 2 premiers et voir le résultat en quasi temps réel.

    S'il n'y a vraiment pas de solution, je vais complètement les séparer, car la j'ai fais ça pour faire de l'économie de fonctions, comme je risque d'en avoir 150 ... Mais je trouve ça galère de demander l'exécution de 2 fonction à un callback on est obligé de créer une autre fonctions qui ne fait que appeler 2 fonctions.
    Fichiers attachés Fichiers attachés

  2. #42
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    J'ai voulu commencé à fouiller mais c'est trop long
    De ce que je comprends c'est le champ Step3_Results qui pose problème.
    Je pense que tu devrais faire ce calcul dès la création de la fenêtre puisqu'en fait il doit obligatoirement être fait quelque soit l'action que tu vas faire dans l'onglet 3.
    Tu peux faire le calcul par défaut dès l'ouverture.

    Je te conseille donc de rajouter ces 2 lignes à la fin de ta fonction principale (après, hFig=, uitabpanel, uitabpanel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    handles=guidata(gcf);
    Step3_Calcul(gcf,handles);
    Je ne peux tester chez moi il me manque apparemment la fonciton Laser_Pref.

    Sinon quand tu auras le temps pour améliorer un peu la lisibilité (pour mes yeux), il y a une méthode qui permet d'éviter les copier/coller quand tu veux créer plein d'objets qui auront des propriétés semblables :
    Tu crées la structure des couples propriétés/valeurs et tu l'utilise dans UICONTROL.
    Exemple :
    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
    %structure des objets text Laser
    SLaser=struct(...
        'parent',laser_panel,...
        'style','text',...
        'units','normalized',...
        'fontsize',laser_fontsize,...
        'fontweight',laser_fontweight,...
        'HorizontalAlignment','right');
    uicontrol(SLaser,...
        'String','Longueur d''onde  ',...
        'Position',[0,1/24+4/6+4/48,0.6,1/6]);
    uicontrol(SLaser,...
        'String','Energie  ',...
        'Position',[0,1/24+3/6+3/48, 0.6,1/6]);
    uicontrol(SLaser,...
        'String','Puissance Moyenne  ',...
        'Position',[0,1/24+2/6+2/48, 0.6,1/6]);
    uicontrol(SLaser,...
        'String','M²  ',...
        'Position',[0, 1/24+1/6+1/48, 0.6,1/6]);
    uicontrol(SLaser,...
        'String','Taux de répétition  ',...
        'Position',[0, 1/24, 0.6,1/6],...);

  3. #43
    Invité
    Invité(e)
    Par défaut
    Pourtant j'ai déjà mis la fonction dans à l'ouverture mais j'ai toujours les mêmes problèmes ensuite...

    Sinon c'est cool ta structure, mais ça va me faire perdre 60 % des lignes, ça sera moins la classe après de dire que le code fait que 1000 lignes ,

    mais c'est vrai que c'est vite illisible, surtout avec les version antérieur à la 2008b qui proposer pas de "folder" les fonctions ou alors j'ai pas trouvé l'option.

  4. #44
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    Pourtant j'ai déjà mis la fonction dans à l'ouverture mais j'ai toujours les mêmes problèmes ensuite...
    Et donc là ça ne fonctionne toujours pas ?
    Peux tu faire un petit display de ta structure handles à la fin de la fonction principale ?

    Citation Envoyé par bizounours94 Voir le message
    Sinon c'est cool ta structure, mais ça va me faire perdre 60 % des lignes, ça sera moins la classe après de dire que le code fait que 1000 lignes ,
    Heureusement on n'est pas payé au nombre de lignes.
    Eternel débat...
    Ce qui est important c'est dans l'ordre (à mon avis) :
    - que le code fasse ce qu'on lui demande
    - qu'il le fasse le plus vite possible
    - que le code soit lisible et bien commenté, réutilisable

    Citation Envoyé par bizounours94 Voir le message
    mais c'est vrai que c'est vite illisible, surtout avec les version antérieur à la 2008b qui proposer pas de "folder" les fonctions ou alors j'ai pas trouvé l'option.
    Effectivement je n'ai pas cette option, c'est assez récent.

  5. #45
    Invité
    Invité(e)
    Par défaut
    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 Step3(htab,evdt,hpanel,hstatus)
    handles = guidata(gcf);
    load User_Specs.mat
    %Définition du style graphique
    %*****************************
    Step3_backgroundcolor=[0.4314,0.5882,0.8431];
    Step3_Titlesize=20;
    Step3_Titleweight='bold';
    Step3_Titlecolor=[0,0,0];
    Step3_fluencesize=12;
    Step3_resumesize=12;
    Step3_edit_backgroundcolor=[1,1,1];
    ...
    guidata(gcf,handles);
    Step3_Calcul(gcf,handles);

    Mais depuis tout à l'heure j'ai tout changé, j'ai séparé les sliders. Ça marche mieux sauf que mon slider diamètre (_2 dans le code) déconne et je ne sais pas pourquoi, quoi que je fasse il revient tout le temps à sa valeur initiale... pourtant je vois pas de différence avec le code des 2 premiers(_1 dans le code) qui marche très bien et celui la.

    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
    function Step3_SliderText_1(gcf, handles)
    handles = guidata(gcf);
    %get the string for the editText component
    sliderValuePuissance = get(handles.Step3_Slidtext_Puissance,'String');
    sliderValueRepet = get(handles.Step3_Slidtext_Repet,'String');
    %convert from string to number if possible, otherwise returns empty
    sliderValuePuissance = str2double(sliderValuePuissance);
    sliderValueRepet = str2double(sliderValueRepet);
     
    if (isempty(sliderValuePuissance) || sliderValuePuissance < 0 || sliderValuePuissance > 20)
        set(handles.Step3_Slide_Puissance,'Value',20);
        set(handles.Step3_Slidtext_Puissance,'String','20');
    else
        set(handles.Step3_Slide_Puissance,'Value',sliderValuePuissance);
    end
     
    if (isempty(sliderValueRepet) || sliderValueRepet < 0 || sliderValueRepet > 80000)
        set(handles.Step3_Slide_Repet,'Value',20000);
        set(handles.Step3_Slidtext_Repet,'String','20000');
    else
        set(handles.Step3_Slide_Repet,'Value',sliderValueRepet);
    end
     
    guidata(gcf, handles);
    Step3_Affichage(gcf,handles);
     
    function Step3_Slider_1(gcf, handles)
    handles = guidata(gcf);
    %obtains the slider value from the slider component
    sliderValuePuissance = get(handles.Step3_Slide_Puissance,'Value');
    sliderValueRepet = get(handles.Step3_Slide_Repet,'Value');
    %puts the slider value into the edit text component
    set(handles.Step3_Slidtext_Puissance,'String', num2str(sliderValuePuissance));
    set(handles.Step3_Slidtext_Repet,'String', num2str(sliderValueRepet));
    % Update handles structure
    guidata(gcf, handles);
    Step3_Affichage(gcf,handles);
     
    function Step3_SliderText_2(gcf, handles)
    handles = guidata(gcf);
    %get the string for the editText component
    sliderValueDiam = get(handles.Step3_Slidtext_Diam,'String');
    %convert from string to number if possible, otherwise returns empty
    sliderValueDiam = str2double(sliderValueDiam);
     
    if (isempty(sliderValueDiam) || sliderValueDiam < 0)
        set(handles.Step3_Slide_Diam,'Value',0);
        set(handles.Step3_Slidtext_Diam,'String','0');
    else
        set(handles.Step3_Slide_Diam,'Value',sliderValueDiam);
    end
     
    guidata(gcf, handles);
    Step3_Calcul(gcf,handles);
     
    function Step3_Slider_2(gcf, handles)
    handles = guidata(gcf);
    sliderValueDiam = get(handles.Step3_Slide_Diam,'Value');
    set(handles.Step3_Slidtext_Diam,'String', num2str(sliderValueDiam));
    guidata(gcf, handles);
    Step3_Calcul(gcf,handles);

  6. #46
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    Mais depuis tout à l'heure j'ai tout changé, j'ai séparé les sliders. Ça marche mieux sauf que mon slider diamètre (_2 dans le code) déconne et je ne sais pas pourquoi, quoi que je fasse il revient tout le temps à sa valeur initiale... pourtant je vois pas de différence avec le code des 2 premiers(_1 dans le code) qui marche très bien et celui la.
    Ben comme ça je ne vois pas de différence non plus (à paret que les _1 appellent Affichage, et les _2 Calcul).
    Il faudrait voir la définition des sliders.

  7. #47
    Invité
    Invité(e)
    Par défaut
    A priori ça vient pas des fonctions que j'appelle car même en mettant tout dans le même panier ça fait pareil.

    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
    handles.Step3_Slidtext_Puissance=uicontrol(...
            'parent',Step3control,...
            'units','normalized',...
            'fontsize',Step3_fluencesize,...
            'Style','edit',...
            'position',[0.45,0.85,0.4,0.15],...
            'backgroundcolor',Step3_edit_backgroundcolor,...
            'HorizontalAlignment','center',...
            'string','20',...
            'callback',@Step3_SliderText_1);
    handles.Step3_Slidtext_Repet=uicontrol(...
            'parent',Step3control,...
            'units','normalized',...
            'fontsize',Step3_fluencesize,...
            'Style','edit',...
            'position',[0.45,0.525,0.4,0.15],...
            'backgroundcolor',Step3_edit_backgroundcolor,...
            'HorizontalAlignment','center',...
            'string','20000',...
            'callback',@Step3_SliderText_1);
    handles.Step3_Slidtext_Diam=uicontrol(...
            'parent',Step3control,...
            'units','normalized',...
            'fontsize',Step3_fluencesize,...
            'Style','edit',...
            'position',[0.45,0.2,0.4,0.15],...
            'backgroundcolor',Step3_edit_backgroundcolor,...
            'HorizontalAlignment','center',...
            'string','1.8',...
            'callback',@Step3_Slider_2);
    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
    handles.Step3_Slide_Puissance=uicontrol(...
            'parent',Step3control,...
            'units','normalized',...
            'fontsize',Step3_fluencesize,...
            'Style','slider',...
            'min',0,...
            'max',20,...
            'backgroundcolor',Step3_edit_backgroundcolor,...
            'position',[0.45,0.7,0.4,0.15],...
            'Value',20,...
            'callback',@Step3_Slider_1);
    handles.Step3_Slide_Repet=uicontrol(...
            'parent',Step3control,...
            'units','normalized',...
            'fontsize',Step3_fluencesize,...
            'Style','slider',...
            'min',0,...
            'max',80000,...
            'backgroundcolor',Step3_edit_backgroundcolor,...
            'position',[0.45,0.375,0.4,0.15],...
            'Value',20000,...
            'callback',@Step3_Slider_1);
    handles.Step3_Slide_Diam=uicontrol(...
            'parent',Step3control,...
            'units','normalized',...
            'fontsize',Step3_fluencesize,...
            'Style','slider',...
            'min',0,...
            'max',10,...
            'backgroundcolor',Step3_edit_backgroundcolor,...
            'position',[0.45,0.05,0.4,0.15],...
            'Value',1.8,...
            'callback',@Step3_SliderText_1);
    La ça revient tout le temps à 1.8, mais pour les autres ça revient pas tout le temps a la valeur initiale ... je comprend pas ce qu'il se passe, on dirait qu'il y a un endroit ou ça demande d'actualiser le handles avec la valeurs de 1.8 mais je ne vois pas où

  8. #48
    Invité
    Invité(e)
    Par défaut
    Ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    surf(handles.Step3_Results_X*1000,handles.Step3_Results_Y*1000,A');
           set(handles.fluence_axe,'view',az);
           fig=gcf;
           load('MyColormaps','mycmap')
           set(fig,'Colormap',mycmap);
           set(handles.fluence_axe,'CLim',[2 4.5])       
           colorbar;
    me donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ??? Error using ==> set
    There is no 'Colormap' property in the 'uicontrol' class.
     
    Error in ==> panel>Step3_Affichage at 1920
           set(fig,'Colormap',mycmap_fluence);
     
    Error in ==> panel>Step3_Calcul at 1899
    Step3_Affichage(gcf,handles);
     
    ??? Error while evaluating uicontrol Callback
    normalement gcf ça renvoie la main sur la figure et d'après la doc matlab, le colormap dépend de la figure.

    Mais la j'ai l'impression que le gcf ne me renvoie pas la fidure mais un uicontrol

  9. #49
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    normalement gcf ça renvoie la main sur la figure
    Oui sauf si tu as écraser GCF quelque part en faisant :Un petit :pour vérifier.

    Et tu as réussi à résoudre ton problème de slider ?
    Sinon peux-tu remettre ton code mis à jour ?

  10. #50
    Invité
    Invité(e)
    Par défaut
    effectivement quand je mets get(...) ça me retourne un uicontrol pourtant je n'ai pas mis de gcf=... c'est surement car ce code se trouve dans des swtich d'un popmenu.

    Sinon j'ia toujours pas trouvé pour le slider, il faudrait que je puisse t'envoyer le code entier avec toutes les fonctions, mais il est composé de fonctions qui ont demandé une modélisation plutôt complexe et qui pourrait m'être voler si je le laisse à la porté de tous, il faudrait que je puisse te l'envoyer en MP...

  11. #51
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    effectivement quand je mets get(...) ça me retourne un uicontrol pourtant je n'ai pas mis de gcf=... c'est surement car ce code se trouve dans des swtich d'un popmenu.
    Non la seule et unique possibilité est que gcf a été instancié quelque part d'une manière ou d'une autre.

    Aaaaaaaaargh ben oui
    Dans tes sous-fonctions (dernière version que j'ai) tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function mafonction(gcf,handles)
    Faut pas ! Car ainsi gcf est considéré comme une variable.
    Donc si par hasard ailleurs tu appelles ta fonction par exemple avec :
    ben GCF vaudra 3. Tu vois ?

    Mets plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function mafonction(hFig,handles)
    avec les modifications dans le code qui suit qui vont bien.

    C'est pour ça que perso je n'aime pas trop utiliser GCF, GCO (voir : Règles de "bonne conduite"), on n'est jamais sur à 100% de quoi il s'agit.

  12. #52
    Invité
    Invité(e)
    Par défaut
    C'est bon pour le gcf, ça marcheux.

  13. #53
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Ca venait bien des définitions : tu as inversé les callbacks pour le slider qui pose problème :
    sliders :
    Step3_Slide_Diam => @Step3_SliderText_1
    Step3_Slide_Repet => @Step3_Slider_1
    Step3_Slide_Puissance =>@Step3_Slider_1

    edits :
    Step3_Slidtext_Diam => @Step3_Slider_1
    Step3_Slidtext_Repet => @Step3_SliderText_1
    StStep3_Slidtext_Puissance =>@Step3_Slidtext_1
    Il faut inverser les 2 en rouge. Et hop !

  14. #54
    Invité
    Invité(e)
    Par défaut
    J'ai du le relire 2564 fois et je l'ai même pas vu, j'ai vraiment plus les yeux en face des trous ....

    Heureusement que tu les as toi, merci.

  15. #55
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    C'est aussi pour ça que je t'ai donné le conseil des structures.
    Une fois que tu n'auras plus que les propriétés spécifiques pour chaque élément tu y verras beaucoup plus clair
    Et un conseil : mets des commentaires, car vu le nombre d'objets que tu as, à un moment ça va être difficile de s'y retrouver (même si tu fais l'effort de mettre des noms significatifs).

Discussions similaires

  1. Comment faire une table-arbre comme celle de la view "Problèmes" ?
    Par leonelag dans le forum Eclipse Platform
    Réponses: 6
    Dernier message: 21/08/2007, 12h56
  2. peux je faire une interface java comme vb.net
    Par mini-Informaticien dans le forum 2D
    Réponses: 2
    Dernier message: 05/05/2007, 00h40
  3. Comment faire une interface de ce type....
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/04/2007, 13h50
  4. [Débutant] Comment faire une interface graphique ?
    Par hanane78 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 29/12/2006, 09h43

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