Bonjour,
Je débute dans la création d'interface graphique utilisateur, alors je me suis aidé des tutoriaux très bien réalisés par Jérôme Briot. Je suis notamment parti de cette page, avec la partie "gui_var_globales".
Situation
Mon code est assez structuré : par ligne sur l'interface. La ligne 1 de l'interface sert à choisir un workpath. Les lignes 2 à 5 permettraient de choisir le jour et le mois, je récupèrerais ensuite ces valeurs pour concaténer des fichiers contenant des valeurs à traiter (en l'occurrence, pour l'éolien donc des vitesses etc.). Le traitement est en partie réalisé, avec d'ailleurs à la base un programme rempli de prompt pour récupérer les valeurs des jours/mois, mais j'aimerais présenter cela de façon plus automatisée, une réelle interface utilisateur.
Probleme
Dans le fichier de Jérôme, j'ai ajouté de nombreux handles pour que l'interface soit plus complète (jusqu'à 20). J'aimerais que les fonctions "ajouter" et "retrancher" fonctionnent sur plusieurs handles, donc il faudrait que je récupère l'indice du handle qui sollicite la fonction en question pour que cette dernière agisse sur un autre handle. Hum, je vais être plus clair à la fin du post. Voici une partie du code :
Puis à la fin les fonctions :
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
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 %% Fonction Principale function gui_var_globales % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction % nCompteur : valeur courante du compteur (scalaire) % handles : identifiants des objets graphiques (vecteur) global nCompteur handles global nCompteur1 handles global nCompteur2 handles global nCompteur3 handles global nCompteur4 handles global PathName handles global nbhandles handles % Initialisation de la variable représentant la valeur courante du compteur nCompteur à 0 nCompteur=1;nbhandles=1;nCompteur1=1;nCompteur2=1;nCompteur3=1;nCompteur4=1; %% Création de l'objet Figure handles(1)=figure('units','pixels',... 'position',[250 250 800 250],... 'color',[0.925 0.913 0.687],... 'numbertitle','off',... 'name','[GUI] Utilisation des variables globales',... 'menubar','none',... 'tag','interface'); %% Ligne choix du répertoire % Texte --------------------------------------- handles(2)=uicontrol('style','text',... 'units','normalized',... 'position',[0.25 0.88 0.74 0.1],... 'string','Répertoire en cours...',... 'tag','PathName'); % PushButton ---------------------------------- handles(3)=uicontrol('style','pushbutton',... 'units','normalized',... 'position',[0.02 0.88 0.2 0.1],... 'string','Répertoire',... 'callback',@repertoire,... 'tag','repertoire'); %% Ligne choix du jour de début % Texte --------------------------------------- handles(4)=uicontrol('style','text',... 'units','normalized',... 'position',[0.02 0.75 0.2 0.1],... 'string','Jour du début',... 'tag','Jourdébut'); % Texte du résultat --------------------------- handles(5)=uicontrol('style','text',... 'units','normalized',... 'position',[0.25 0.75 0.3 0.1],... 'string','1',... 'tag','resultat'); % Pushbutton - -------------------------------- handles(6)=uicontrol('style','pushbutton',... 'units','normalized',... 'position',[0.57 0.75 0.2 0.1],... 'string','-',... 'callback',@retrancher,... 'tag','bouton-'); % Pushbutton + -------------------------------- handles(7)=uicontrol('style','pushbutton',... 'units','normalized',... 'position',[0.79 0.75 0.2 0.1],... 'string','+',... 'callback',@ajouter,... 'tag','bouton+'); %% Ligne choix du mois de début % Texte --------------------------------------- handles(8)=uicontrol('style','text',... 'units','normalized',... 'position',[0.02 0.63 0.2 0.1],... 'string','Mois du début',... 'tag','Moisdébut'); % Texte du résultat --------------------------- handles(9)=uicontrol('style','text',... 'units','normalized',... 'position',[0.25 0.63 0.3 0.1],... 'string','1',... 'tag','resultat'); % Pushbutton - -------------------------------- handles(10)=uicontrol('style','pushbutton',... 'units','normalized',... 'position',[0.57 0.63 0.2 0.1],... 'string','-',... 'callback',@retrancher,... 'tag','bouton-'); % Pushbutton + -------------------------------- handles(11)=uicontrol('style','pushbutton',... 'units','normalized',... 'position',[0.79 0.63 0.2 0.1],... 'string','+',... 'callback',@ajouter,... 'tag','bouton+');
Et voici l'interface :
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
62
63
64
65
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %DEBUT DE LA SOUS-FONCTION RETRANCHER% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function retrancher(obj,event) % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction % nCompteur : valeur courante du compteur (scalaire) % handles : identifiants des objets graphiques (vecteur) global nCompteur handles global nbhandles handles nbhandle=obj; nbhandles=fix(nbhandle)-1 % Diminution de la valeur de nCompteur if nCompteur==1 nCompteur=nCompteur; else nCompteur=nCompteur-1; end % Actualisation de la propriété String de l'objet Uicontrol Text résultat set(handles(nbhandles),'string',num2str(nCompteur)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %FIN DE LA SOUS-FONCTION RETRANCHER% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %DEBUT DE LA SOUS-FONCTION AJOUTER% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ajouter(obj,event) % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction % nCompteur : valeur courante du compteur (scalaire) % handles : identifiants des objets graphiques (vecteur) global nCompteur handles global nbhandles handles nbhandle=obj; nbhandles=fix(nbhandle)-2 % Augmentation de la valeur de nCompteur if nCompteur==12 nCompteur=nCompteur; else nCompteur=nCompteur+1; end % Actualisation de la propriété String de l'objet Uicontrol Text résultat set(handles(nbhandles),'string',num2str(nCompteur)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %FIN DE LA SOUS-FONCTION AJOUTER% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function repertoire(obj,event) global PathName handles PathName = uigetdir; %[FileName,PathName] = uigetfile('*.sta','Sélectionnez les fichiers texte', 'MultiSelect', 'on'); %cd(PathName); set(handles(2),'string',PathName);
En fait, les boutons + et - doivent modifier le texte de la même ligne... Il doit y avoir un moyen simple, je pense que c'est assez "bricolage" mais bon.
Le mieux serait même d'ajouter une ligne de plus à la fin avec un récapitulatif : "Période du [jj.mm.yyyy] au [jj.mm.yyyy]".
A noter que dans la suite du programme, j'incrusterai d'autres handle du style pushbutton "Rose des vents", et lors du lancement une courbe de Rose des vents s'afficherait, avec toutes les données des fichiers de la période choisie précédemment. Le problème est donc le passage à la partie interface.
J'espère avoir été clair...
Et j'espère que vous m'aiderez pour cette simple manipulation qui me bloque depuis un bon nombre d'heures !
![]()
Partager