Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Interfaces Graphiques
Interfaces Graphiques Forum d'entraide sur les interfaces graphiques en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2012, 22h59   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Par défaut Problème de gestion de guidata

Bonjour,

J’ai un bouton qui me permet d’effacer une base d’image. Lorsqu’on clic sur celui-ci une fenêtre de confirmation s’affiche et après confirmation la fonction d’effacement est appelé. Pendant l’effacement un cercle de progression s’affiche sur mon interface et celui est donc mis à jour pendant la progression.

Voici comment je procède :

Bouton de RAZ :
Code :
1
2
3
set(handles.bp_Purge,...
    'Callback', {@warning1,handles.Interface},...
       'Units', 'normalized');
Confirmation de la suppression :
Code :
1
2
3
function supprimer(obj,event,handle_inter)
close;
findAndDeleteResult(handle_inter)
Fonction de suppression:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function findAndDeleteResult(handle)

   % Appel de mon cercle de progression
  ProgressBarCircular2('action','new','title','','handle',handle);
     ------
    
    for 
        %%%% CODE PR LA SUPPRESSION %%%
         ProgressBarCircular2('action','update','handle',handle,'color',[1 0 0],'value',floor(percent));
        pause(0.01)
    end
    ------
     ProgressBarCircular2('action','finish','handle',handle,'value',100);
Et voici le code de mon cercle de progression :

Code :
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
function obj = ProgressBarCircular2(varargin)
 
% Input arguments number check
if ~nargin || mod(nargin,2)
    error('Incorrect number of input arguments');
end
 
% Initialize parameters
action = '';
value = -1;
obj = -1;
tag = '';
color=[50/255 155/255 255/255 ];
 
% Input arguments assign
for k=1:2:nargin
    prop = varargin{k};
    data = varargin{k+1};
    
    if strcmpi(prop,'action')
        action = data;
    elseif strcmpi(prop,'value')
        value = data;
    elseif strcmpi(prop,'handle')
        obj = data;
    elseif strcmpi(prop,'color')
        color =data;
    end
end
 
% Process data
if strcmpi(action,'new')
    % Create a new loader and return handle
    initLoader(obj);
    
elseif strcmpi(action,'update')
    % Check if a valid value has been specified
    if ~isnumeric(value) || value < 0 || value > 100
        error('Value property value must be a number between 0 and 100')
    end
    
    % Update desired loader
    updateLoader(obj,value,color)
    
elseif strcmpi(action,'finish')
    if ~isnumeric(value) || value ~= 100
        error('Value property value must be a number between 0 and 100')
    end
    finishLoader(obj,value,color)
else
    error('Action property value must evaluate to ''new'',''update'' or ''finish''')
end
 
end
%%
% Create a new loader
function initLoader(obj)
 
% Create axes and progress text
hdl.hAxes = axes(...
    'Parent',obj,...
    'Units','pixels',...
    'Position',[390 158 40 40 ],...
    'Xtick',[],...
    'Ytick',[],...
    'xlim',[-1 1],...
    'ylim',[-1 1],...
    'color',[1 1 1],...
    'XLimMode','manual',...
    'tag','handler_Axe',...
    'YLimMode','manual');
 
 
hdl.progressText = uicontrol(...
    'style','text',...
    'Units','pixels',...
    'Position',[420 150 150 40],...
    'string','Progress : 0%',...
    'BackgroundColor',[1 1 1],...
    'HorizontalAlignment','left',...
    'tag','handler_Circulaire',...
    'ForegroundColor','r');
 
set(hdl.hAxes,...
    'Units', 'normalized');
 
set(hdl.progressText ,...
    'Units', 'normalized');
 
% Axes settings
axis equal
axis off
 
% Update gui data
guidata(obj,hdl);
 
end
 
%%
% Update the desired loader
function updateLoader(obj,value,color)
 
% Get gui data
hdl = guidata(obj);
% Clear axes
cla(hdl.hAxes)
 
% draw preloader
sectors = 360;
angles = 0:2*pi/sectors : 2*pi*value/100;
xs = .6*[sin(angles),.5*sin(flipdim(angles,2))];
ys = .6*[cos(angles),.5*cos(flipdim(angles,2))];
hdl.pre = fill(xs,ys,color,'Parent',hdl.hAxes);
 
% Axes settings
 
axis(hdl.hAxes,'equal')
axis(hdl.hAxes,'off')
hold(hdl.hAxes,'off')
 
set(hdl.hAxes,...
    'Xtick',[],...
    'Ytick',[],...
    'xlim',[-1.5 1.5],...
    'ylim',[-1.5 1.5],...
    'XLimMode','manual',...
    'YLimMode','manual');
 
% Update progress text
set(hdl.progressText,'string',sprintf('Effacement en cours : \n          %d %%',value))
 
% Update gui data
guidata(obj,hdl);
end
 
function finishLoader(obj,value,color)
% Delete figure if progress has reached 100%
if value == 100
    
    % Get gui data
    hdl = guidata(obj);
    % Clear axes
    cla(hdl.hAxes)
      
    tic;%depart du chronometre
    for i=1:10000000
        t=toc;
        if t<2
            set(hdl.progressText,'string',sprintf('Effacement en cours : \n          %d %%',value))
         
        elseif t>2 && t<7
            set(hdl.progressText,'string',sprintf('  RAZ Données : \n        Terminée'))
        pause(0.01)
        elseif t>7    
            delete(hdl.progressText)
            delete(hdl.hAxes)
            break;
            
        end
    end
end
end
Le code marche bien... même trop bien car pour la MAJ du mon cercle de progression guidata(obj,hdl); m'efface toute les configurations
de mon interface et les remplaces par hdl.progressText et hdl.progressText .

Mon problème vient il directement de guidata ou de l'initialisation de ma fonction initLoader(obj)
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h23   #2
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 829
Points : 6 829
Bonsoir,

Ce problème a déjà été rencontré dans cette discussion avec la fonction GIFPLAYER.
Dans ton cas, rajoute
Au début de la fonction initLoader.
Il te faudra faire attention de ne pas avoir les Tags hAxes et progressText déjà présents dans ton interface.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h41   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
C'était aussi simple que ça hdl = guidata(obj); figuré bien dans ma fonction update et finish mais pas dans le create . Et dire que ça fait plus d'une heure que je cherche à modifier les paramètres de mon data pour corriger le problème .

Pour les Tag je les aient supprimés. J'avais remarqué que même si il le Tag était défini, lorsque je faisait un get(data) le champ tag resté vide.

Merci !!! Des fois 3 mots vaux mieux qu'un long discours.
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h53   #4
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 829
Points : 6 829
Le fait qu'il figurait dans les autres fonctions est normal: c'est pour récupérer les handles créés justement dans la fonction initLoader.
À la ligne 95 guidata(obj,hdl); les handles hAxes et progressText sont enregistrés dans ta figure interface (tu as fait passer obj), de la même façon que toi, mais cela écrase le contenu déjà présent
D'où ma solution de récupérer TON contenu d'abord, de lui faire rajouter ses éléments, puis de sauvegarder le tout

Citation:
Envoyé par TheDwarf01 Voir le message
Pour les Tag je les aient supprimés. J'avais remarqué que même si il le Tag était défini, lorsque je faisait un get(data) le champ tag resté vide.
Je ne suis pas sûr de comprendre: de quels Tags parles-tu?
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 00h08   #5
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Citation:
c'est pour récupérer les handles créés justement dans la fonction initLoader
Oui c'était logique sur le coup d'écrire cela dans mes sous fonctions... mais j'avoue que sur le coup le mettre aussi dans la fonction init... ça me serai pas venu à l'esprit... j'essaye plus de créer une sauvegarde de mon contenu beaucoup plus en amont lors de ma fenêtre de confirmation pour la RAZ ...

Encore une fois MERCI.
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 00h19   #6
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Pour les tags ... pardon c'est moi qui radote et raconte n'importe quoi... j'ai besoin d'une pause
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h46.


 
 
 
 
Partenaires

Hébergement Web