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 08/02/2012, 13h21   #1
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 93
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2011
Messages : 93
Points : 57
Points : 57
Par défaut xlim/ylim axes+edit text

Bonjour,

Je voudrais récupérer les 2 éléments de la fonction xlim dans un seul edit texte lors de l´appuie sur la touche 'return'

J´ai déjà créer le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function [] = MainWindow(varargin)
% Création de la zone texte éditable
     uicontrol('style','edit',...
     'units','normalized',...
     'KeypressFcn',@xmin_xmax,...
     'tag','xlim',...
     'position',[0.38 0.88 0.05 0.05]);

% Création de l´axe
axes('units','normalized',...
    'Position',[0.32 0.25 0.5 0.5],...
    'tag','Main_axes',...
    'Color','white'); 

Maindata=guihandles(gcf);
guidata(gcf,Maindata);
end
ainsi que :

Code :
1
2
3
4
5
6
7
8
9
10
11
function [] = xmin_xmax(~,event)

Maindata = guidata(gcf);

xlim = str2double(get(Maindata.xlim,'String'));
if strcmp(event.Key,'return')
    disp(xlim)
    set(Maindata.Main_axes,'xlim',xlim );
end

end
J´ai 2 problèmes , le 1er est est il possible de récupérer 2 valeurs différentes dans un seul edit (j´ai déjà essaye de les séparer avec une virgule ou un espace mais sans succès), à savoir dans mon cas xmin et xmax et si oui comment ?
Et pourquoi dois-je appuyer 2 fois sur la touche 'return' pour obtenir ma valeur xlim

Merci!
junkie1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 14h00   #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 824
Points : 6 824
Bonjour,

Citation:
Envoyé par junkie1986 Voir le message
est il possible de récupérer 2 valeurs différentes dans un seul edit (j´ai déjà essaye de les séparer avec une virgule ou un espace mais sans succès), à savoir dans mon cas xmin et xmax et si oui comment ?
La fonction STR2DOUBLE ne fonctionne que sur des scalaires, c'est STR2NUM qu'il te faut dans ton cas.

Citation:
Envoyé par junkie1986 Voir le message
Et pourquoi dois-je appuyer 2 fois sur la touche 'return' pour obtenir ma valeur xlim
Ça c'est un (malheureux) problème lié au fonctionnement du KeyPressFcn. Dans ton cas préfère utiliser le Callback.
__________________
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 08/02/2012, 14h42   #3
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 93
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2011
Messages : 93
Points : 57
Points : 57
Merci !

Citation:
Ça c'est un (malheureux) problème lié au fonctionnement du KeyPressFcn. Dans ton cas préfère utiliser le Callback.
Ca confirmait mes craintes

Sinon voici la reponse à mon probleme si il y en a qui sont interessé

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function [] = xmin_xmax(~,event)

Maindata = guidata(gcf);


if strcmp(event.Key,'return')
xlim_STR = (get(Maindata.xlim,'String'));
find(xlim_STR==','); % Find ','
xlim(1)=str2double(xlim_STR(1:find(xlim_STR==',')-1));
xlim(2)=str2double(xlim_STR(find(xlim_STR==',')+1:length(xlim_STR)));
set(Maindata.Main_axes,'xlim',xlim );
end

end
Il faut absolument que vous separiez vos 2 elements par une virgule, le 1 element est donc xmin et le 2 xmax
junkie1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 14h53   #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 824
Points : 6 824
Tu n'as rien suivi de ce que je t'ai dit
C'est justement le Callback qui est exécuté lorsque tu appuies sur Entrer ou enlèves le focus.
Simplement:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function [] = MainWindow(varargin)
% Création de la zone texte éditable
     uicontrol('style','edit',...
     'units','normalized',...
     'Callback',@xmin_xmax,...
     'tag','xlim',...
     'position',[0.38 0.88 0.05 0.05]);

% Création de l´axe
axes('units','normalized',...
    'Position',[0.32 0.25 0.5 0.5],...
    'tag','Main_axes',...
    'Color','white'); 

Maindata=guihandles(gcf);
guidata(gcf,Maindata);
end
Et
Code :
1
2
3
4
5
6
7
8
function xmin_xmax(hObject,~) % C'est plutôt event qui n'est pas utilisé ici

Maindata = guidata(gcbf);  % Plus correct

lim = str2num( get(hObject,'String') );
xlim(Maindata.Main_axes,lim);

end
xlim est le nom d'une fonction MATLAB (que j'utilise justement ci-dessus), chose à éviter.

PS: pense à rajouter les sécurités en cas de mauvaise saisie.
__________________
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 08/02/2012, 15h13   #5
Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 93
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2011
Messages : 93
Points : 57
Points : 57
Désolé je me suis entêté avec le 'KeyPressFcn' alors qu´un 'callback' fonctionne parfaitement.

N´empêche je voulais écrire str2num au début mais du fait que Matlab préconise l´utilisation du str2double je n´ai plus fais par la suite attention au fait que str2double ne fonctionne QUE sur les scalaires

Merci encore pour ton aide
junkie1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 15h19   #6
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 824
Points : 6 824
Il le préconise en effet, mais nous averti quand même:
STR2DOUBLE is faster than STR2NUM, however STR2DOUBLE operates only on scalars. Use the function that best suits your needs.
__________________
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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h05.


 
 
 
 
Partenaires

Hébergement Web