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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 9
    Points
    9

    Par défaut Pré sélectionner un élément du liste déroulante

    Bonjour,

    J'ai créer une liste déroulante avec 3 options. Je souhaiterais pré selectionner un élément de la liste mais j'obtiens un warning que je n'explique pas lors de l'utilisation de la fonction gtk_combo_box_set_active.
    Voici mon code

    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
     
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
     
    int main(int argc,char **argv){
     
    	// INITIALISATION DE GTK
    	gtk_init(&argc, &argv);
     
     
    	// VARIABLE
    	GtkWidget *fenetre = NULL;
    	GtkWidget *combo_format_message;
    	GList *liste_format = NULL;
    	GtkWidget *table = NULL;
     
     
    	// FENETRE PRINCIPALE ET PARAMETRAGE
    	fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);				// on créer notre fenetre principale
    	gtk_window_set_title(GTK_WINDOW(fenetre), "Calculatrice Crypto");	// titre
    	gtk_window_set_default_size(GTK_WINDOW(fenetre), 500, 500);		// taille
    	gtk_window_set_position(GTK_WINDOW(fenetre), GTK_WIN_POS_CENTER);	// position 
     
     
     
     
    	// TABLE			
    	table = gtk_table_new(5, 5, TRUE);
    	gtk_container_add(GTK_CONTAINER(fenetre), table);		// add le container dans la fenetre
     
     
     
    	// LISTE DEROULANTE (a compléter)
    	liste_format = g_list_append(liste_format, "binaire"); 				
    	liste_format = g_list_append(liste_format, "décimal"); 		
    	liste_format = g_list_append(liste_format, "hexadécimal"); 
     
    	combo_format_message = gtk_combo_new(); 								// cree une liste deroulante
    	gtk_table_attach(GTK_TABLE(table), combo_format_message, 4, 5, 0, 1, GTK_EXPAND, GTK_EXPAND, 5, 5);
    	gtk_combo_set_popdown_strings(GTK_COMBO(combo_format_message), liste_format) ; 				// met la liste dans la combo box
    	gtk_combo_box_set_active(GTK_COMBO_BOX(combo_format_message), 0);						// élément pré-selectionné
    	//gchar * p_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combo_format_message));
    	//gchar *p_text = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo_format_message))));
    	//gchar *p_text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(combo_format_message));
    	fflush(stdout);
     
     
     
     
     
    	// FONCTION DE CALLBACK 
       	g_signal_connect(G_OBJECT(fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
     
     
     
    	// AUTRE
    	gtk_widget_show_all(fenetre);				// affichage
    	gtk_main();						// lancement de la boucle infinie
     
     
     
     
    	return EXIT_SUCCESS;
    }




    Voilà les erreurs que j'obtiens. Je ne comprends pas pourquoi je n'ai pas le droit de cast en GTK_COMBO_BOX.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (test2:4341): GLib-GObject-WARNING **: invalid cast from 'GtkCombo' to 'GtkComboBox'
     
    (test2:4341): Gtk-CRITICAL **: IA__gtk_combo_box_set_active: assertion 'GTK_IS_COMBO_BOX (combo_box)' failed
    Comment rectifier celà ?

    Cordialement

  2. #2
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 1 982
    Points : 3 770
    Points
    3 770
    Billets dans le blog
    4

    Par défaut

    Bonjour.

    gtk_combo_new (); est obsolète. Il te faut utiliser gtk_combo_box_new (); en lieu place. Je pense que ca devrait résoudre ton petit souci.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 353
    Points : 2 000
    Points
    2 000

    Par défaut

    Bonjour,

    il semble que tu utilises GTK+ 2, y a-t-il une raison particulière ? Je te conseille de passer d'urgence à GTK+ 3, sorti en 2011 et stable depuis plusieurs années ! GTK+ 4 est d'ailleurs en préparation, sortie prévue pour 2019.
    Comme l'a dit gerald3d, tu utilises un widget obsolète (GtkCombo) de GTK+ 2. Un widget obsolète dans une version de GTK+ disparaît de la version majeure suivante. Ainsi GtkCombo n'existe même plus dans GTK+ 3 et ton compilateur t'aurait renvoyé une erreur.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  4. #4
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 353
    Points : 2 000
    Points
    2 000

    Par défaut

    Pour en revenir à ton problème, tu confonds deux objects: GtkCombo (obsolète) et GtkComboBox. L'objet que tu as créé a un type bien défini: tu ne peux pas appeler des fonctions de GtkCombo sur un GtkComboBox.
    Là tu as créé un GtkCombo et tu utilises des méthodes de GtkComboBox dessus. Forcément, ça plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    combo_format_message = gtk_combo_new();
    gtk_table_attach(GTK_TABLE(table), combo_format_message, 4, 5, 0, 1, GTK_EXPAND, GTK_EXPAND, 5, 5);
    gtk_combo_set_popdown_strings(GTK_COMBO(combo_format_message), liste_format);
    gtk_combo_box_set_active(GTK_COMBO_BOX(combo_format_message), 0);
    Il faut donc changer le type de widget créé et créer un GtkComboBox comme l'a it gerald3d, mais aussi trouver l'équivalent de gtk_combo_set_popdown_strings (méthode de GtkCombo) pour un GtkComboBox.
    Attention aussi à utiliser les bons casts (GTK_COMBO_BOX(...))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    combo_format_message = gtk_combo_box_new();
    gtk_table_attach(GTK_TABLE(table), combo_format_message, 4, 5, 0, 1, GTK_EXPAND, GTK_EXPAND, 5, 5);
    // La ligne suivante ne fonctionne que sur un GtkCombo, pas un GtkComboBox
    // gtk_combo_set_popdown_strings(GTK_COMBO(combo_format_message), liste_format);
    gtk_combo_box_set_active(GTK_COMBO_BOX(combo_format_message), 0);
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 9
    Points
    9

    Par défaut

    Ok, merci pour toutes les réponses.

    J'ai finalement réussi à régler mon problème.
    Par contre, je n'avais même pas fai sgaffe que j'utilisais GTK+2 (j'ai juste suivi un tuto pour l'installation de GTK). Je vais de ce pas installer GTK+3

  6. #6
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 353
    Points : 2 000
    Points
    2 000

    Par défaut

    Merci. Effectivement, ces tutos écris à un moment donné dans le temps et plus maintenus ensuite c'est un vrai problème... GTK+ 4 pourrait sortir en 2019, on va se retrouver avec des tutos GTK+ 2, 3, 4 dans la nature et souvent les auteurs de tutos ne précisent même pas de quelle version ils parlent, et ne se demandent même pas comment leur tuto va vieillir... Du coup tu as dû te retrouver avec un GTK+ 2.10 qui date de 2006...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 9
    Points
    9

    Par défaut

    GTK+3 date bien de 2011 non ?
    C'est la première fois que je bosse sur interface graphique et j'avoue que je rencontre beaucoup de difficultés.
    J'ai notamment l'impression qu'il y a peu de code de GTK3 dispo sur internet. Dès que je recherche comment résoudre tel ou tel problème, je tombe sur du cote déprécié. Je sais pas si c'est que je m'y prends mal ou quoi mais j'ai beaucoup de mal à trouver des exemples de bout de code (heureusement qu'il y a des forums comme celui-ci).

  8. #8
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 1 982
    Points : 3 770
    Points
    3 770
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par switttter Voir le message
    GTK+3 date bien de 2011 non ?
    C'est la première fois que je bosse sur interface graphique et j'avoue que je rencontre beaucoup de difficultés.
    J'ai notamment l'impression qu'il y a peu de code de GTK3 dispo sur internet. Dès que je recherche comment résoudre tel ou tel problème, je tombe sur du cote déprécié. Je sais pas si c'est que je m'y prends mal ou quoi mais j'ai beaucoup de mal à trouver des exemples de bout de code (heureusement qu'il y a des forums comme celui-ci).
    Très bonne remarque . Reste sur ce forum, tu as toutes les réponses, ou presque .

    N'hésite pas à consulter les tutoriels et la faq Gtk+. Et n'hésite pas non plus à poser toutes les questions qui te semblent nécessaires.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  9. #9
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2009
    Messages : 1 353
    Points : 2 000
    Points
    2 000

    Par défaut

    Citation Envoyé par gerald3d Voir le message
    Très bonne remarque . Reste sur ce forum, tu as toutes les réponses, ou presque .

    N'hésite pas à consulter les tutoriels et la faq Gtk+. Et n'hésite pas non plus à poser toutes les questions qui te semblent nécessaires.
    Oh que non malheureux, je déconseille fortement les tutos, car ils n'échappent pas à ce que j'ai indiqué plus haut: ils sont pour GTK+ 2, et n'ont pas été maintenus. Idem pour la FAQ, les livres, les outils.

    C'est pour cette raison que j'ai demandé à devenir modérateur: ces ressources nuisent à l'utilisation de GTK+. Le problème c'est que c'est pas wikipédia ici, et la modification de ressources passe par un long process, avec installation d'un éditeur XML spécifique (sic). Idéalement il faudrait que je demande à tous les sites qui ont des ressources obsolètes de soit les mettre à jour, ou au moins indiquer spécifiquement dans le titre que c'est pour du GTK+ 2. Et encore, ce qui était vrai pour GTK+ 2.10 ne l'est plus forcément en 2.24, et c'est cette dernière qui est encore maintenue.

    Un autre problème vient du fait qu'il y a un manque de ressources upstream (chez GNOME) en termes de documentation. Eux aussi avaient un tutoriel complet du temps de GTK+ 2, mais celui ci aussi non plus n'a pas été maintenu: trop de changements, pas assez de contributeurs. Pour GTK+ 3 les guides ont finalement été intégrés dans la doc GTK+ et plus dans des documents extérieurs. Je pense tout de même qu'un guide d'introduction minimal aurait un intérêt. Plus il sera petit, plus il sera facile à maintenir, et aura moins de chances de devenir obsolète.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/02/2010, 10h04
  2. Réponses: 7
    Dernier message: 26/10/2009, 13h56
  3. Réponses: 10
    Dernier message: 27/11/2008, 00h23
  4. Réponses: 2
    Dernier message: 28/05/2008, 13h36
  5. Réponses: 3
    Dernier message: 16/05/2008, 15h21

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