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 :

Probleme d'interruption de callback


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Probleme d'interruption de callback
    Bonjour,

    Je suis actuellement en train de développer une application permettant de sélectionner des séries d'images DICOM.
    Je voudrai que lorsque l'utilisateur séléctionne une (ou plusieurs) série(s) d'images dans une liste box, la ou les séries séléctionnées défilent (j'affiche les images les unes apres les autres grace a la fonction imagesc, et je laisse une pause de 0.01 sec entre l'affichage de chaque image).
    Cette fonction est donc située directement dans le callback de ma listebox. Ceci fonctionne tres bien.

    Mon probleme est que lorsque qu'un nouveau callback est appelé, intérrompant le défilement de la série d'image, une fois le second callback terminé la série qui était en train de défiler au moment de l'intérruption reprend ou elle s'était arretée....
    J'explique un peu mieux le soucis :
    • L'utilisateur clique sur une ligne de ma listbox, la série d'image défile
    • Si pendant le défilement de cette série l'utilisateur clique sur une autre ligne de la liste box, la nouvelle série défile jusqu'au bout, mais ensuite la premiere série redéfile a partir de l'image ou elle a été interrompue...
    • De même si je ferme ma fenetre alors qu'une série est encore en train de défiler, l'affichage se poursuit dans une fenêtre figure qui s'ouvre lorsque la mienne se ferme...

    Bref j'espere avoir été assez clair sur mon probleme.

    J'ai cherché a le résoudre en utilisant les propriétés interruptible et busyaction de ma listbox mais je n'ai pas réussi a le résoudre..

    ci joint la fonction qui pose probleme :
    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
     
    % Function called when the user clicks on the list of slices
    function SliceSelection_callback(hObject, eventdata)
    data = guidata(gcf) %Load data structure
     
    SelectedSlices = get(hObject,'value');
     
    nFrame = data.Stack.nFrame; %nFrame correspond au nombre d'images dans une série
    nSlice = length(SelectedSlices); %nSlice correspond au nombre de séries sélectionnées
    nRow = ceil(sqrt(nSlice));
    nCol = ceil(nSlice/nRow);
     
    for iFrame=1:nFrame
        for iSlice=1:length(SelectedSlices)
            subplot(nRow,nCol,iSlice),...
                imagesc(data.Stack.Slice(SelectedSlices(iSlice)).Frame(iFrame).Im), colormap(gray),...
                axis('image','off');
            title(['Slice : ' num2str(SelectedSlices(iSlice)) ', Frame : ' num2str(iFrame)]);
        end
        pause(0.01);  %pause de 0.01 sec entre l'affichage de chaque image
    end
     
    end
    PS :
    J'utilise Matlab en version 7.5, et je programme mon GUI "a la main", en utilisant la méthode "GUIDATA et GUIHANLDES" qui est tres bien décrite dans le tutoriel.

  2. #2
    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 828
    Points
    14 828
    Par défaut
    Un petit exemple qui vaut ce qu'il vaut mais qui reproduit un peu ton problème (en fait durant la pause MATLAB est de nouveau accessible en quelque sorte) :
    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
    function h=mongui(varargin)
    hFig=figure;
    hedit=uicontrol('style','edit','pos',[10 10 100 20]);
    uicontrol('pos',[120 10 20 20],'string','go','callback',@push);
    lancer=0;
        function push(varargin)
            lancer=lancer+1;
            actuel=lancer;
            for k=1:10
                if ~ishandle(hFig)
                    %la fenetre n'existe plus
                    return
                end
                set(hedit,'string',k);
                pause(0.5);
                %Verifier qu'un autre callback n'a pas été lancé pendant la
                %pause
                if actuel~=lancer
                    return
                end
            end
        end
    end

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    oui en effet je pensais bien que le soucis venais de la reprise du callback apres la pause, c'est ce que j'avais lu dans la doc de matlab mais je ne voyais pas comment contourner le probleme !! Merci beaucoup, en effet ton code fonctionne tres bien pour le probleme que j'avais

    J'ai même réussi a l'adapter pour l'utiliser sur différents callbacks : maintenant j'ai rajouter un bouton de lecture, et la séquence d'images ne défile que si on clique sur ce bouton. Et si pendant que la séquence défile l'utilisateur clique de nouveau sur la liste la séquence est stopée et j'affiche la nouvelle série. Tout ca grace au code que tu m'a envoyé et en utilisant les GUIDATA pour faire passer les variables d'un callback a l'autre.

    Merci bcp développez.com, a chaque projet informatique que je fait, je trouve toujours les solutions grace a ce forum, quelque soit le langage

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

Discussions similaires

  1. Probleme d'interruptions ( mauvaise IDT ou GDT ou 8259A-2 )
    Par codas dans le forum Programmation d'OS
    Réponses: 2
    Dernier message: 05/11/2017, 23h43
  2. Problemes d'interruptions Boutons Poussoirs
    Par sheva94 dans le forum Embarqué
    Réponses: 1
    Dernier message: 09/03/2012, 06h40
  3. probleme d'interruption de l'execution
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/01/2008, 10h45
  4. probleme d'interruption de l'execution
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/01/2008, 10h33
  5. Interruption de Callbacks
    Par pwfsic dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 25/05/2007, 12h21

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