Je n'ai pas dit que ca résoudrait tous les problèmes. Je signalais seulement les premières coquilles.
Au fur et à mesure que tu les supprimes ca affine voir supprime d'autres erreurs qui peuvent paraître bizarres.
Je n'ai pas dit que ca résoudrait tous les problèmes. Je signalais seulement les premières coquilles.
Au fur et à mesure que tu les supprimes ca affine voir supprime d'autres erreurs qui peuvent paraître bizarres.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
C'est sur que corriger les warnings apparaissant en compilant avec gcc -Wall, ce serait la première étape avant de re-soumettre du code ici...
Ensuite, coder "en dur" des valeurs pour construire l'interface à coup de copier coller, c'est pas spécialement super propre... Un boucle ajoutant le nombre de contrôles nécessaires serait tout de même plus propre...
"Une boucle ajoutant le nombre de contrôles nécessaires serait tout de même plus propre... "
Désolé mais je ne comprend pas.
En gros, tu as 3 fois le même code copié/collé...
Fais une fonction qui crée tes briques d'éléments graphiques, et appelle la dans une boucle...
Un truc de ce genre... C'est pour donner l'idée, ça ne compilera pas tel quel.
Et ton code copié/collé, tu le rends un peu plus générique pour créer la fonction panel_create_with_index. Bref, factorise ton code. Quand tu as une tâche effectuée plusieurs fois quasiment de la même manière, crée une fonction plutôt que de faire du copier/coller.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 static const int n_panels = 3; int i; GtkWidget *panel; for (i = 0; i < n_panels; i++) { panel = panel_create_with_index (i); gtk_box_pack_start (GTK_BOX (vbox), panel); }
J'ain un petit problème avec les variables...
La X est en static double, y-as-t-il une autre déclaration possible car j'obtien: "assignment of read-only variable'X' " Ca pose problème car quand je fais un static X=une_valeur mon programme marche mais en récupérant cette valeur depuis une gtk_entry ca marche pas.... Quelqun peut-il m'aider en me donant la déclaration de variable adapté au changement de valeur. Merci
Voici une partie de mon code, celle qui est concernée:
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 static const double X=2; const gchar *nbr; gdouble number; pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); /// Creation de la fenêtre /// /* On ajoute un espace de 5 sur les bords de la fenetre */ gtk_container_set_border_width(GTK_CONTAINER(pWindow), 5); gtk_window_set_title(GTK_WINDOW(pWindow), "Regression Lineaire Mesures"); gtk_window_set_default_size(GTK_WINDOW(pWindow), 70, 250); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); /* Creation et insertion de la table 10 lignes 4 colonnes */ pTable=gtk_table_new(10,4,FALSE); gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(pTable)); /// Nb de mesures /// /* Creation et insertion des elements contenus dans le premier GtkFrame */ pLabel1 = gtk_label_new("Nombre de mesures :"); pEntry0 = gtk_entry_new(); /* Recuperation du texte contenu dans le GtkEntry */ nbr = gtk_entry_get_text(GTK_ENTRY(pEntry0)); /* Conversion chaine -> valeur numérique */ number = g_strtod (nbr, NULL); /* Modification du nombre */ X=number;
Tu ne peux pas la déclarer en const (ce qui signifie qu'on ne peut que lire la valeur, plus écrire dedans), et tenter d'écrire ensuite dans cette variable...
Je sait merci, mais justement je demandais si quelqun connait une autre fascon de déclarer une variable pour que e puisse modif sa valeur au cours du programme.
Hé bien non, tu ne sais pas...
Sinon tu aurais compris qu'il faut enlever le mot clé "const" pour pouvoir la modifier par la suite.
Merci de vos conseil j'ai réussi a comprendre pas mal de truc et a faire marcher la plupart des modules de mon programme.
J'ai compris l'utilité de la Liste et du passage d'un élément a un autre dans des "VBox" ou "HBox" simples ou emboîtés les unes dans les autres mais je n'y arrive pas avec les "pVBoxFrame" ... Je vous joins mon module de test simplifié si vous voulez bien m'aider dans ce problème. Merci.
Ps: Vous remarquerez sans doute ma tentative de récupération du contenu de la première entry: pEntry0 pour la mètre dans number2 et l'affichage dans la fenêtre de console. J'ai pourtant mis cet affichage dans la fenêtre et dans la fonction on_copier_boutton. Si quelqu'un peut aussi m'expliquer cela ca serais super. Merci.
PS2: Je vous ai joints une capture d'écran quand j'ai remplis les cases et cliqué sur le Bouton. On peut voir qu'il y a une erreur mais je n'ai pas l'expérience pour comprendre exactement la signification.
Le problème ce situe ici dans la fonction void on_copier_button2(GtkWidget *pButton_valeur, gpointer data):
Tout d'abord tu prends tes widgets dans le désordre. L'ajout dans la VBox est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /* Passage a l element suivant : le Label */ pList = g_list_next(pList); /* Le premier element est le GtkEntry */ pTempEntry0 = GTK_WIDGET(pList->data); /* Cet element est le GtkLabel */ pTempLabel = GTK_WIDGET(pList->data);
Ensuite tu commences par incrémenter le pointeur de ta liste avant de prendre les éléments. Tu commences donc par le deuxième élément. C'est normal que Gtk+ ne retrouve pas ses petits
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pFrame2 |-pLabel3 |-pEntry |-....
Donc, si on remet tout dans l'ordre cela donne :pour finir si tu veux un affichage en console il faut terminer tes lignes par un retour chariot "\n". Utilise aussi en priorité la fonction g_printf();.
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 /* Recuperation de la liste des elements que contient la GtkVBox */ pList = gtk_container_get_children(GTK_CONTAINER((GtkWidget*)data)); /* Le premier element est le GtkLabel */ pTempLabel = GTK_WIDGET(pList->data); /* On passe au pointeur suivant */ pList = g_list_next(pList); /* Cet element est le GtkEntry */ pTempEntry0 = GTK_WIDGET(pList->data);
Code : Sélectionner tout - Visualiser dans une fenêtre à part g_print ("number :%lf\n", number2);
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Super! Merci je vais tester ca cet apres-midi.
L'ordre:
Et j'ai compris mon erreur, quand on recup un élément de la liste, on ne passe pas au suivant mais on reste dans le même...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pFrame2 |-pLabel (contiens le texte: X3) |-pEntry (l'entry a copier) |-pLabel (Celui qui affiche la valeur)Donc il faut passer à l'élément suivant! Je vais compléter mon code ce soir et j'uplaud demain. Comme ca ceux qui cherchent a faire pareil auront un exemple pour chercher
![]()
Je met en ligne une version simplifié qui consiste en une seulle fonction pour recopier les X et Y.
Cependant j'ai une question, je voudrais savoir comment faire une seule et unique fonction que l'on active une fois qui s'occupe de récupérer les données de chaque box et la recopier dans le label en dessous. J'ai besoin de mètre une seule fonction de récupération de box dans mon programme car il me faut associer chaque contenu de box a une variable dan un de mes programmes (une fois les box et variables associées correctement la fonction lancerais le calcul). Mais je n'ai pas réussi a trouver seul comment faire en sorte qu'une fonction aille créer une liste pour chaque pFrame utilisé pour y récupérer le contenu des box.... Pouvez vous m'aider s'il vous plait? Merci.
Quand cela marcheras je pourrais poster dans ce topic la version avec une unique fonction pour que d'autres qui sont bloqués sur ce problème puissent avancer.En ésperant que tout mes problèmes que vous m'avez grandement aidé a résoudre puissent servir a des fins éducatifs.
La forme que j'imagine pour la fonction unique qui recopie chaque donnée:
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 void on_copier_button(GtkWidget *pButton_valeur, gpointer data) { GtkWidget *pTempEntry0; GtkWidget *pTempLabel; GtkWidget *pTempLabel0; GList *pList; const gchar *sText; gchar *modified_text; gdouble number; float number2; /* Recuperation de la liste des elements que contient la GtkVBox */ pList = gtk_container_get_children(GTK_CONTAINER(pVBoxFrame1)); /// X /* Le premier element est le GtkLabel */ pTempLabel0 = GTK_WIDGET(pList->data); /* On passe au pointeur suivant */ pList = g_list_next(pList); /* Cet element est le GtkEntry */ pTempEntry0 = GTK_WIDGET(pList->data); /* On passe au pointeur suivant */ pList = g_list_next(pList); /* Le premier element est le GtkLabel */ pTempLabel = GTK_WIDGET(pList->data); /* Recuperation du texte contenu dans le GtkEntry */ sText = gtk_entry_get_text(GTK_ENTRY(pTempEntry0)); /* Conversion chaine -> valeur numérique */ number = g_strtod (sText, NULL); /* Liberation de la memoire utilisee par la liste */ g_list_free(pList); /// Passage au pFrame 2 dans la List /* Recuperation de la liste des elements que contient la GtkVBox */ pList = gtk_container_get_children(GTK_CONTAINER(pVBoxFrame2)); /// X /* Le premier element est le GtkLabel */ pTempLabel0 = GTK_WIDGET(pList->data); /* On passe au pointeur suivant */ pList = g_list_next(pList); /* Cet element est le GtkEntry */ pTempEntry0 = GTK_WIDGET(pList->data); /* On passe au pointeur suivant */ pList = g_list_next(pList); /* Le premier element est le GtkLabel */ pTempLabel = GTK_WIDGET(pList->data); /* Recuperation du texte contenu dans le GtkEntry */ sText = gtk_entry_get_text(GTK_ENTRY(pTempEntry0)); /* Conversion chaine -> valeur numérique */ number = g_strtod (sText, NULL); /* Liberation de la memoire utilisee par la liste */ g_list_free(pList); /// etc ... Les autres pFrame }
Idée la plus simple:
- Créer une structure qui va contenir tous les widgets utilisés dans l'interface.
- Déclarer un variable du type de cette structure et initialiser chaque pointeur.
- Transmettre en tant que données utilisateur cette variable à tous les Callback et fonctions qui ont besoin d'accéder à un widget de l'interface.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Etant novice, je vais poser quelques questions...
* Créer une structure qui va contenir tous les widgets utilisés dans l'interface.
Quel genre de structure svp?
est-ce ?:
int nomdestructure (int argc, char **argv)
{
}
* Déclarer un variable du type de cette structure et initialiser chaque pointeur.
Une Glist adapté à la structure en question?
Admettons que ce que j'ai écris juste au dessus soit une structure, comment puis-je déclarer une Glist qui copie un pFrame déterminé dans une autre structure au-dessus? Car j'ai remarqué que l'erreur est que le pFrame en question ne se trouve pas dans la même structure. Est ce que je peut faire appel au contenu d'un widget extérieur à ma structure???? Si oui, quel est la syntaxe adapté pour le faire svp?
* Transmettre en tant que données utilisateur cette variable à tous les Callback et fonctions qui ont besoin d'accéder à un widget de l'interface.
Comment peut on faire cela?
Si quelqu'un a de la documentation à partager svp ca ne serais pas de refus... Car à la bibliothèque universitaire il n'y a pas de documentation sur GTK![]()
Non, ça c'est une fonction.
Toute la documentation nécessaire est sur http://library.gnome.org
Tu y trouveras entre autre la doc GTK+ et GLib.
ok merci je vais plancher desus!
sinon j'ai trouvé un site sympa mais assez compliqué (en Anglais): http://asis.epfl.ch/GNU.MISC/gtk-1.2...oc.html#TOC416
Faut avouer que les cours que j'ai eu en C était plutôt minimalistes... :/
Mais je vais rattraper ce retard! ^^
La librairie Gtk+ a été conçue au départ pour la création de The Gimp. Elle a ensuite pris son essor grâce à son utilisation pour l'environnement Gnome.
Le lien que tu donnes fait partie du développement de The Gimp. Attention tout de même en titre. Il est écrit l'année 1998. Donc sûrement plus qu'obsolète.![]()
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Oublie, ce lien c'est pour GTK 1.2, sorti en 1999. Depuis, GTK 2 est sorti en 2002, et GTK 3 sortira normalement en avril 2011. Plus personne n'utilise GTK1 pour de nouveaux programmes. Le plus simple actuellement est de coder en GTK2...
Télescopages de posts Liberforce![]()
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Partager