Discussion: GTK+3 - menu

  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 GTK+3 - menu

    Bonjour

    Je continue l'apprentissage de GTK sous linux en développant une petite appli.
    Je souhaiterais créer un menu comme on en voit dans toutes les applications.

    J'ai essayé de récupérer des petits bouts de code à droite à gauche pour voir comment faire.
    J'arrive au final à créer mon menu mais ce dernier n'est visible que lorsque mon appli est en full screen (ce qui est embetant, car je ne souhaite jamais passer en full screen).

    Voici un petit bout de code dans lequel je créer un menu tout simple .
    Pour compiler : gcc test10.c -lgmp -o test10 $(pkg-config --libs --cflags gtk+-3.0)
    ./test10

    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
     
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
    //#include "rsa.c"
     
    int main(int argc,char **argv){
     
    	// INITIALISATION DE GTK
    	gtk_init(&argc, &argv);
     
     
    	// VARIABLE
    	GtkWidget *fenetre = NULL;
    	GtkWidget *menubar;
    	GtkWidget *fileMenu;
    	GtkWidget *fileMi;
    	GtkWidget *quitMi;
    	GtkWidget *vbox;
     
     
    	// 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 
     
    	vbox = gtk_box_new(FALSE, 0);
    	gtk_container_add(GTK_CONTAINER(fenetre), vbox);
     
    	fileMi = gtk_menu_item_new_with_label("File");
    	quitMi = gtk_menu_item_new_with_label("Quit");
     
    	menubar = gtk_menu_bar_new();
    	fileMenu = gtk_menu_new();
     
    	gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);
    	gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);
    	gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);
     
     
    	gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
     
     
    	// 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 infini
     
     
    	return EXIT_SUCCESS;
    }

    Y'a t'il moyen de faire tout de même apparaître mon menu alors que je ne suis pas en full screen ?

    Cordialement

  2. #2
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 961
    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 961
    Points : 3 710
    Points
    3 710
    Billets dans le blog
    4

    Par défaut

    Bonjour.

    Après un copier/coller de ton code je lance une première compilation et là c'est le drame . Segfault !!!

    Effectivement il y a un "tout petit problème". Tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      vbox = gtk_box_new(FALSE, 0);
    Malheureusement pour toi le prototype de cette fonction est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GtkWidget *
    gtk_box_new (GtkOrientation orientation,
                 gint spacing);
    Le premier argument n'est pas de type gboolean mais GtkOrientation. Si tu remplaces FALSE par GTK_ORIENTATION_VERTICAL, tu verras, le résultat sera plus en adéquation avec tes attentes .
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  3. #3
    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

    C'est étrange ce que tu me dis, je n'ai aucune erreur ni même warning à la compilation.
    Voici la ligne de commande que j'utilise : gcc test10.c -lgmp -o test10 $(pkg-config --libs --cflags gtk+-3.0) suivi de ./test10

    Qu'est ce qui fait que je n'ai pas d'erreur ?
    Et du coup j'ai tout de même le même soucis même en effectuant la petite modification que tu m'as indiqué (mon menu n’apparaît que lorsque je suis en full screen).

  4. #4
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 961
    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 961
    Points : 3 710
    Points
    3 710
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par switttter Voir le message
    C'est étrange ce que tu me dis, je n'ai aucune erreur ni même warning à la compilation.
    Voici la ligne de commande que j'utilise : gcc test10.c -lgmp -o test10 $(pkg-config --libs --cflags gtk+-3.0) suivi de ./test10

    Qu'est ce qui fait que je n'ai pas d'erreur ?
    Et du coup j'ai tout de même le même soucis même en effectuant la petite modification que tu m'as indiqué (mon menu n’apparaît que lorsque je suis en full screen).
    Je viens de refaire une compilation avec moins d'options pour pouvoir l'exécuter. Ton problème principal est que comme tu n'utilises pas GtkOrientation tu utilises la valeur de FALSE comme argument. Ce qui correspond à l'orientation horizontale. Je ne pense pas que ce soit que tu cherches.

    Voila la copie d'écran de ton application avec la variable GTK_ORIENTATION_VERTICAL utilisée en lieu et place de FALSE avec une taille réduite.

    Nom : Capture d’écran_2018-01-30_17-48-54.png
Affichages : 52
Taille : 4,7 Ko
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 341
    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 341
    Points : 2 039
    Points
    2 039

    Par défaut

    Citation Envoyé par switttter Voir le message
    C'est étrange ce que tu me dis, je n'ai aucune erreur ni même warning à la compilation.
    Voici la ligne de commande que j'utilise : gcc test10.c -lgmp -o test10 $(pkg-config --libs --cflags gtk+-3.0) suivi de ./test10
    En même temps tu n'actives pas les warnings de base... Tu dois compiler avec au minimum -Wall. C'est une des raisons pour laquelle je conseille d'utiliser le système de build meson. Il active les warnings par défaut, ce qui est le comportement le plus sensé.
    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)

  6. #6
    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

    Quelles options est ce que je suis censé ajouter à ma ligne de commande pour voir pop ces warnings ? Parce que là, j'ai essayé de compiler avec les options -Wall et -Wextra et toujours aucun warning.
    Et voici le résultat que j'obtiens (que ce soit en mettant False ou GTK_ORIENTATION_VERTICAL) :

    Nom : Capture du 2018-01-31 14-55-23.png
Affichages : 48
Taille : 7,0 Ko

  7. #7
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 961
    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 961
    Points : 3 710
    Points
    3 710
    Billets dans le blog
    4

    Par défaut

    hum, effectivement tu as un souci. Le code source est correcte. FALSE est equivalent en valeur à GTK_ORIENTATION_HORIZONTAL. Donc tu devrais voir ton menu d'une manière ou d'une autre.

    Je me demande si le thème de ton bureau ne viendrait pas mettre son grain de sel au milieu de tout ce petit monde...Essaye de le changer pour voir le comportement de ton application.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  8. #8
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 341
    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 341
    Points : 2 039
    Points
    2 039

    Par défaut

    Citation Envoyé par switttter Voir le message
    Quelles options est ce que je suis censé ajouter à ma ligne de commande pour voir pop ces warnings ? Parce que là, j'ai essayé de compiler avec les options -Wall et -Wextra et toujours aucun warning.
    Effectivement, ça ne déclenche pas de warning, je me suis fié à gerald3d . gboolean et un typedef sur int et un type énuméré est aussi un int donc le compilateur est satisfait. Toutefois, sans -Wall tu rates la majeure partie des warnings donc je maintiens ma remarque.

    Pour ce qui est de ton soucis de menu, moi aussi j'arrive à avoir un menu normal comme gerald3d. Je suis sous Ubuntu 16.04 + GNOME. Au thème de fenêtre je vois que tu es sous Ubuntu, ce n'est pas les versions avec les menus déportés tout en haut de l'écran ? Tu es dans une sessions Unity ? GNOME ?
    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)

  9. #9
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 341
    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 341
    Points : 2 039
    Points
    2 039

    Par défaut

    Citation Envoyé par switttter Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       	g_signal_connect(G_OBJECT(fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
    Autre chose, je vois cette erreur très souvent: on doit connecter gtk_main_quit à "destroy" et pas "delete-event". N'est-ce pas gerald3d ?
    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)

  10. #10
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 961
    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 961
    Points : 3 710
    Points
    3 710
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par liberforce Voir le message
    Citation Envoyé par switttter Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       	g_signal_connect(G_OBJECT(fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
    Autre chose, je vois cette erreur très souvent: on doit connecter gtk_main_quit à "destroy" et pas "delete-event". N'est-ce pas gerald3d ?
    Tout à fait . Un copier/coller malencontreux... Code source rectifié.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  11. #11
    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

    Je vais essayer de compiler mon code ce soir sous un autre environnement du coup.
    Jusque là, les tests ont été réalisé sous Ubuntu 16.04.3 Unity.

  12. #12
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 961
    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 961
    Points : 3 710
    Points
    3 710
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par switttter Voir le message
    Je vais essayer de compiler mon code ce soir sous un autre environnement du coup.
    Jusque là, les tests ont été réalisé sous Ubuntu 16.04.3 Unity.
    Non. Le problème ne semble pas venir de la compilation mais plutôt de la manière dont ton environnement graphique (le bureau) affiche les fenêtres. Sous Gnome les menus ne sont plus intégrés dans la fenêtre de l'application mais sur le bureau en haut de l'écran. À la manière d'Apple si je ne me trompe...

    Donc il te suffit de changer de bureau, XFCE par exemple, et de lancer ton application voir si tu retrouves ta barre de menu au bon endroit.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  13. #13
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    1 341
    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 341
    Points : 2 039
    Points
    2 039

    Par défaut

    Citation Envoyé par gerald3d Voir le message
    Sous Gnome les menus ne sont plus intégrés dans la fenêtre de l'application mais sur le bureau en haut de l'écran. À la manière d'Apple si je ne me trompe...
    Tu te trompes . En fait c'est Unity qui utilise ce système de menu global. C'est donc spécifique à Ubuntu + Unity. Sous Ubuntu + GNOME, il y a de moins en moins de menus et bares de menus, et un menu global à l'application dans la barre du haut.

    switttter, il y a moyen de désactiver le menu global: http://www.tux-planet.fr/comment-des...-ubuntu-unity/
    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)

  14. #14
    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

    Bon effectivement, le soucis venait bien de là ^^

    Merci

Discussions similaires

  1. [GTK] ouvrir une nouvelle fenêtre depuis un menu
    Par danathane dans le forum Interfaces Graphiques
    Réponses: 18
    Dernier message: 06/01/2009, 16h01
  2. GtK StatusIcon avec menu OU comment faire un menu en gtk
    Par lauben dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 03/12/2008, 15h38
  3. Problème de sous menu dynamique [GTK+/C]
    Par DevMg dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 28/09/2008, 20h00
  4. activer/deasctiver un menu avec gtk+
    Par opensource dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 06/09/2007, 16h24
  5. menu gtk c++ ???
    Par jadey dans le forum GTK+ avec C & C++
    Réponses: 16
    Dernier message: 15/03/2006, 09h39

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