IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

GTK+ avec C & C++ Discussion :

icone texte dans barre outils


Sujet :

GTK+ avec C & C++

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 233
    Par défaut icone texte dans barre outils
    Bonjour,

    J'ai crée un bouton dans une barre d'outil affichant la lettre G au liu d'un icone.

    Je n'arrives pas à utiliser gtk_widget_hide dessus

    J'ai utilisé la fonction dépréciée gtk_insert_stock pour afficher un autre icone car j'arrives bien à m'en servir.

    J'ai essayé d'utiliser gtk_toolbar_insert sans plus de succès.

    J'arrives à créer et afficher mon icone avec la lettre via
    gtk_button_new_with_label puis gtk_container_add

    le retour de la fonction gtk_button_new_with_label est stocké dans un GtkWidget, je comprends donc pas pourquoi gtk_widget_hide ne fonctionne pas.

    Pour mon test gtk_toolbar_insert, je ne suis pas sûr que GTK_TOOL_ITEM existe, je l'ai mis suite à msg d'erreur "GTK_IS_TOOL_ITEM failes " dans la console. L'utilisation de GTK_IS_TOOL_ITEM à la place de GTK_TOOL_ITEM j'ai une erreur à la compilation.

    J'ai utilisé gtk_container_add suite à info je ne sais plus où dans la doc

    gtk_toolbar_insert que je n'ai pas réussi à utiliser demande un GtkToolItem, moi j'ai mis un GtkWidget, GtkToolItem étant contenun dans un widget, si j'utilise une macro de conversion ça devrait marcher non ? Si c'est le cas mon prob. vient probablement de mon utilisation de GTK_TOOL_ITEM

    Merci pour votre aide

    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
     
    #include <stdlib.h>
    #include<gtk/gtk.h>
     
    int main (int argc, char **argv)
    {
    GtkWidget 	*fenetre;
    GtkWidget 	*box;
    GtkWidget 	*barre_outil;
    GtkWidget	*bouton_g;
    GtkWidget	*bouton_quit;
     
    	gtk_init (&argc, &argv);
     
    	fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_title (GTK_WINDOW (fenetre), "Test");
    	gtk_window_set_default_size(GTK_WINDOW(fenetre), 640, 480); 
    	g_signal_connect(G_OBJECT(fenetre),"delete-event",G_CALLBACK(gtk_main_quit),NULL);
     
    	box=gtk_vbox_new(FALSE,5); 
       	gtk_container_add(GTK_CONTAINER(fenetre),box);
     
    	barre_outil=gtk_toolbar_new();
    	gtk_box_pack_start(GTK_BOX(box),barre_outil,FALSE,FALSE,0);
     
    	bouton_g=gtk_button_new_with_label("G");
    //	gtk_toolbar_insert(GTK_TOOLBAR(barre_outil),GTK_TOOL_ITEM(bouton_g),-1);
    	gtk_container_add(GTK_CONTAINER(barre_outil),GTK_WIDGET(bouton_g));
     
    /*  code posant problème */
    	gtk_widget_hide(bouton_g);
     
    /*  fin code posant problème */
     
    	bouton_quit=gtk_toolbar_insert_stock(GTK_TOOLBAR(barre_outil),GTK_STOCK_QUIT,NULL,NULL,gtk_main_quit,NULL,-1);	
     
    /* code fonctionnant :
    	gtk_widget_hide(bouton_quit);
    */
     
    	gtk_widget_show_all(fenetre);
      	gtk_main();
      	return 0;
    }
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    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 395
    Par défaut
    Tu ne peux ajouter dans un GtkToolbar qu'une instance d'un GtkToolItem ou d'une des classes dérivées. Ce n'est pas le cas de GtkButton !

    Si tu explores le diagramme des classes de GtkToolItem tu as donc la possibilité d'utiliser:
    GtkToolItem
    GtkMenuToolButton
    GtkToggleToolButton
    GtkToolButton
    GtkSeparatorToolItem

    Ces classes peuvent être utilisées comme des GtkToolItem, par polymorphisme.

    Voici ton exemple corrigé:
    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
    #include <stdlib.h>
    #include<gtk/gtk.h>
     
    void on_quit_button_clicked (GtkToolButton *toolbutton, gpointer user_data)
    {
        gtk_main_quit ();
    }
     
    void on_g_button_clicked (GtkToolButton *toolbutton, gpointer user_data)
    {
        g_debug ("Button G was pressed !");
    }
     
    int main (int argc, char **argv)
    {
        GtkWidget   *fenetre;
        GtkWidget   *box;
        GtkWidget   *barre_outil;
        GtkToolItem *bouton_g;
        GtkToolItem *bouton_quit;
     
        gtk_init (&argc, &argv);
     
        fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW (fenetre), "Test");
        gtk_window_set_default_size(GTK_WINDOW(fenetre), 640, 480);
        g_signal_connect(G_OBJECT(fenetre),"delete-event",G_CALLBACK(gtk_main_quit),NULL);
     
        box=gtk_vbox_new(FALSE,5);
        gtk_container_add(GTK_CONTAINER(fenetre),box);
     
        barre_outil=gtk_toolbar_new();
        gtk_box_pack_start(GTK_BOX(box),barre_outil,FALSE,FALSE,0);
     
        bouton_g=gtk_tool_button_new (NULL, "G");
        gtk_toolbar_insert(GTK_TOOLBAR(barre_outil), GTK_TOOL_ITEM(bouton_g), -1);
        g_signal_connect(G_OBJECT(bouton_g),"clicked",G_CALLBACK(on_g_button_clicked),NULL);
     
        bouton_quit=gtk_tool_button_new_from_stock (GTK_STOCK_QUIT);
        gtk_toolbar_insert(GTK_TOOLBAR(barre_outil), GTK_TOOL_ITEM(bouton_quit), -1);
        g_signal_connect(G_OBJECT(bouton_quit),"clicked",G_CALLBACK(on_quit_button_clicked),NULL);
     
        gtk_widget_show_all(fenetre);
     
        /* Commenter la ligne suivante pour que le bouton quitter soit affiché */
        gtk_widget_hide(GTK_WIDGET (bouton_quit));
     
        gtk_main();
        return 0;
    J'ai créé des GtkToolButton, et je les ai rajoutés avec gtk_toolbar_insert. Pour ton problème avec gtk_widget_hide, il est logique que ton code ne fonctionne pas: tu appelles gtk_widget_show_all, qui va explorer récursivement toute l'arborescence de widgets et tous les afficher.

    Tu as donc plusieurs possibilités:
    1. appeler gtk_widget_show_all (indique que tous les widgets doivent être affichés), puis cacher ceux que tu ne veux pas (c'est la méthode que j'ai utilisé ici).
    2. utiliser gtk_widget_show (et pas show_all !) sur les widgets que tu souhaites voir (ce qui peut être plus fastidieux)
    3. utiliser gtk_widget_set_no_show_all pour indiquer qu'il y a des widgets que tu souhaites ne pas voir apparaître, et appeler gtk_widget_no_show_all.

    La 3ème méthode est la meilleure.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 233
    Par défaut c'était vraiment très simple
    Simple comme bonjour.

    J'ai déplacé mon appel à gtk_widget_hide après mon gtk_widget_all et ça fonctionne.

    J'avais compris que l'appel à gtk_wiget_hide "marquait" l'objet comme non affichable et du coup l'effaçait de l'écran au cas ou celui-ci était déjà affiché.

    Si j'ai bien compris, pour avoir ce comportement je dois utiliser gtk_widget_set_no_show_all et dans ce cas je présumes que je dois faire un appel à la fonction par objet dont je veux modifier le comportement.

    Si j'utilises gtk_widget__show sur un objet dont j'ai changé l'état par gtk_widget_set_no_show_all, je présumes que celui-ci s'affiche.

    Par contre pour mon bouton, j'utilises gtk_button_new_with_label suivi de gtk_container_add. Est-ce la bonne méthode ? j'ai essayé gtk_tool_bar_insert à la place de gtk_container_add (cf code 1er post ) car cela me paraissait le plus logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_toolbar_insert(GTK_TOOLBAR(barre_menu),GTK_TOOL_ITEM(bouton_g),-1);
    Cela compile mais n'affiche pas le bouton.
    Du coup je ne sais pas si j'ai deux façon de faire : avec gtk_container_add et avec gtk_toolbar_insert après correction d'une éventuelle erreur si je ne peux qu'utiliser gtk_container_add
    Je dois pouvoir utiliser gtk_toolbar_insert
    Si ça marche avec gtk_container_add est-ce faux de proceder ainsi ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. bouton dans barres outils
    Par miopie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/09/2010, 10h38
  2. inactiver bouton commande dans barre outil personnalisée
    Par castor123456 dans le forum VBA Word
    Réponses: 0
    Dernier message: 31/07/2009, 11h59
  3. [CKEditor] Personnaliser Format du texte dans la barre d'outil
    Par Sikko dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 13/01/2009, 14h01
  4. Icone dans Barre d'outils
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 18/12/2006, 11h52

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