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
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    janvier 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2019
    Messages : 16
    Points : 13
    Points
    13

    Par défaut Problème d'exécution lors de la création d'une fenêtre en GTK

    Bonjour tout le monde !

    Svp je débute en GTK et je veux créer une seconde fenêtre lors de l'appui à un bouton dans la première fenêtre !
    et je veux que ma seconde fenêtre contienne aussi des boutons (4 boutons ) !
    Voici le code que j'ai réalisé ! Il ne s'exécutent toujours pas !
    Pouvez vous m'indiquer l'erreur ?

    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
     
    #include <gtk/gtk.h>
    #include "callbacks.h"
     
     
    int new_button (argc,argv) ;
     
    int create_window(int argc, char *argv[]){
       GtkWidget *p_window = NULL;
       GtkWidget *p_main_box = NULL;
     
       GtkWidget *p_button[5];
     
       gtk_init (&argc, &argv);
     
       //Create window
       p_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
     
       gtk_window_set_title(GTK_WINDOW(p_window), "jeu");
       gtk_window_set_default_size(GTK_WINDOW(p_window), 320, 200);
     
       p_main_box = gtk_vbox_new(TRUE, 0);
       gtk_container_add(GTK_CONTAINER(p_window), p_main_box);
     
       p_button[0] = gtk_button_new_with_label("Commencer le jeu ");
       g_signal_connect(G_OBJECT(p_button[0]), "clicked", G_CALLBACK(new_button), NULL);
       gtk_box_pack_start(GTK_BOX(p_main_box), p_button[0], FALSE, FALSE, 0);
     
       gtk_widget_show_all(p_window);
    }
     
     
    int main (int argc, char *argv[]) {
       create_window(argc,argv);
       gtk_main ();
       return 0;
    }
    et voici le callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int new_button (int argc, char* argv[])
    {
           gtk_init(&argc,&argv);
           GtkWidget *window , *button ;
           window=gtk_window_new(GTK_WINDOW_TOPLEVEL) ;
           button=gtk_button_new_label("Réponse1") ;
           g_signal_connect(window,"delet_event",G_CALLBACK(gtk_main_quit),NULL) ;
           gtk_container_add(GTK_CONTAINER(window),button);
           gtk_widget_show_all(window) ;
           gtk_main() ;
           return 0 ;
    }

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

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

    Informations forums :
    Inscription : février 2008
    Messages : 2 068
    Points : 4 000
    Points
    4 000
    Billets dans le blog
    4

    Par défaut

    Bonjour.

    Une première réponse rapide sans avoir essayé ton code.

    gtk_init (); doit être exécutée une seule fois. L’idéal est de la lancer au début de la fonction main ();.

    Supprime son appel dans la fonction new_button ();.

    La fonction gtk_main (); doit elle aussi être exécutée une seule fois. Supprime son appel dans la fonction new_button ();.

    La fonction callback new_button (); est appelée via le signal "clicked" émis par un bouton. Son prototype est le suivant :

    void user_function (GtkButton *button, gpointer user_data);

    Tu dois donc respecter ce format et modifier ton code en fonction.
    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 380
    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 380
    Points : 2 032
    Points
    2 032

    Par défaut

    Tu as aussi une erreur sur le nom du signal (delet_event au lieu de delete_event), mais de toute façon c'est au signal "destroy" qu'il faut connecter gtk_main_quit si tu veux quitter à la fermeture d'une fenêtre. Tu peux trouver des exemples d'applications GTK+ ici:
    https://developer.gnome.org/gnome-de...able/c.html.fr
    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. problème d'encodage lors de la création d'une base
    Par thor76160 dans le forum PostgreSQL
    Réponses: 22
    Dernier message: 04/03/2011, 15h04
  2. problème d'encodage lors de la création d'une base
    Par thor76160 dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 29/01/2010, 19h47
  3. Réponses: 5
    Dernier message: 28/10/2008, 14h34
  4. Problème de charset lors de la création d'une instance 8i
    Par girint dans le forum Administration
    Réponses: 2
    Dernier message: 15/06/2007, 13h50
  5. Réponses: 8
    Dernier message: 06/06/2007, 17h03

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