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+ Discussion :

Lancer une fonction sans widget ( débutant )


Sujet :

GTK+

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    dessinateur projeteur VRD
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : dessinateur projeteur VRD
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut Lancer une fonction sans widget ( débutant )
    Bonjour ou bonsoir,

    J'aimerai savoir comment lancer une fonction dans mon programme GTK+ sans passer par un événement ou un widget ?
    La fonction se lance à partir de l'état d'un variable.
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_idle_add (fonction, NULL);
    mais cela ne fonctionne pas très bien...

    merci d'vance pour votre aide

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Points : 1 058
    Points
    1 058
    Par défaut
    Bonjour.

    La méthode g_idle_add permet de lancer une fonction avec une priorité modifiée. Ceci permet notamment de lancer ta fonction lorsque peu de ressources sont utilisées par Gtk...

    Pourquoi ne pas appeler ta fonction directement dans le code ? Sinon, à quel moment veux-tu l'appeler ? Quelles conditions sont requises pour l'appel ?
    ZiK un lecteur audio et son blog.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    dessinateur projeteur VRD
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : dessinateur projeteur VRD
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    Voici mon programme, le problème se trouve à la fin de celui-ci

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
     
    # include <stdlib.h>
    # include <gtk/gtk.h>
    # include <string.h>
    /* Déclaration des prototypes de fonction */
    void Nouv_pret( gpointer data);
    void Mise_a_jour(GtkWidget *widget, gpointer data);
    void programme_prin(GtkWidget * widget, gpointer data) ;
     
    /* Initialisation des variables pour la fênetre d'accueil */
       GtkWidget *Fen_accueil = NULL;
       GtkWidget *Vboite_accueil = NULL;
     
       /* variable pour le bouton nouveau pret */
       gchar *type = NULL;
       GtkWidget *Btn_nouv_pret = NULL;
       GtkWidget *Img_btn_nouv_pret = NULL;
       GtkWidget *Txt_btn_nouv_pret = NULL;
       GtkWidget *hboite_btn_nouv_pret = NULL;
     
       /* variable pour le bouton ancien pret */
       GtkWidget *Btn_anc_pret = NULL;
       GtkWidget *Img_btn_anc_pret = NULL;
       GtkWidget *Txt_btn_anc_pret = NULL;
       GtkWidget *hboite_btn_anc_pret = NULL;
     
       /* variable pour le bouton quitter */
       GtkWidget *Btn_quit_pret = NULL;
     
       /* Initialisation des variables pour la fenêtre principale */
       GtkWidget *Fen_prin = NULL;
       GtkWidget *Vboite_prin = NULL;
       GtkWidget *Barre_outil = NULL;
       GtkWidget *Txt_pret = NULL;
     
       /* Initialisation des variables pour la fenêtre de création de nouveau prêt */
       GtkWidget *Fen_nouv_pret = NULL;
     
       /* variables pour l'emprunteur principal */
       GtkWidget *Label_emprunteur_prin = NULL;
       GtkWidget *Salaire_emprunteur_prin = NULL;
     
    int main (int argc,char **argv )
    {
     
       /* Initialisation de GTK */
       gtk_init(&argc, &argv);
     
       /* Création la fenêtre d'accueil */
       Fen_accueil = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       /* Titre de la fenêtre d'accueil */
       gtk_window_set_title(GTK_WINDOW(Fen_accueil),"- Bienvenue sur immo -");
       /* Dimension de la fenêtre d'accueil */
       gtk_window_set_default_size(GTK_WINDOW(Fen_accueil),450,230);
       /* Centre la fenêtre */
       gtk_window_set_position(GTK_WINDOW(Fen_accueil), GTK_WIN_POS_CENTER);
       /* signal d'arrêt du programme quand on clique sur la croix de la fenêtre */
       g_signal_connect(G_OBJECT(Fen_accueil), "delete-event",G_CALLBACK(gtk_main_quit), NULL);
     
       /* Création de la boite verticale */
       Vboite_accueil = gtk_vbox_new(FALSE, 0 );
       gtk_container_add(GTK_CONTAINER(Fen_accueil), Vboite_accueil);
     
       /* Création du bouton nouveau prêt */
       Btn_nouv_pret = gtk_button_new();
       /* Taille par défaut du bouton nouveau prêt */
       gtk_widget_set_size_request(Btn_nouv_pret,450,100);
       /* Image pour Btn_nouv_pret */
       Img_btn_nouv_pret = gtk_image_new_from_file("./nouv_pret.png");
       /* Texte pour le label du bouton nouveau prêt */
       Txt_btn_nouv_pret = gtk_label_new("Commencer un nouveau prêt immobilier ?");
       /* boite horizontale du bouton nouveau prêt */
       hboite_btn_nouv_pret = gtk_hbox_new (FALSE, 10);
       /* Insertion de boite horizontale dans le bouton nouveau prêt */
       gtk_container_add (GTK_CONTAINER (Btn_nouv_pret), hboite_btn_nouv_pret);
       gtk_box_pack_start (GTK_BOX (hboite_btn_nouv_pret), Img_btn_nouv_pret, TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (hboite_btn_nouv_pret), Txt_btn_nouv_pret, TRUE, FALSE, 0);
       gtk_box_pack_start ( GTK_BOX(Vboite_accueil),Btn_nouv_pret,FALSE,FALSE,10.10); 
       g_signal_connect(G_OBJECT(Btn_nouv_pret), "clicked", G_CALLBACK(programme_prin), "Nouveau");
     
       /* Création du bouton ancien prêt */
       Btn_anc_pret = gtk_button_new();
       /* Taille par défaut du bouton ancien prêt */
       gtk_widget_set_size_request(Btn_anc_pret,450,100);
       /* Image pour Btn_anc_pret */
       Img_btn_anc_pret = gtk_image_new_from_file("./anc_pret.png");
       /* Texte pour le label du bouton ancien prêt */
       Txt_btn_anc_pret = gtk_label_new("Ouvrir un ancien calcul de prêt");
       /* boite horizontale du bouton ancien prêt */
       hboite_btn_anc_pret = gtk_hbox_new (FALSE, 10);
       /* Insertion de boite horizontale dans le bouton ancien prêt */
       gtk_container_add (GTK_CONTAINER (Btn_anc_pret), hboite_btn_anc_pret);
       gtk_box_pack_start (GTK_BOX (hboite_btn_anc_pret), Img_btn_anc_pret, TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (hboite_btn_anc_pret), Txt_btn_anc_pret, TRUE, FALSE, 0);
       gtk_box_pack_start ( GTK_BOX(Vboite_accueil),Btn_anc_pret,FALSE,FALSE,10.10); 
       //g_signal_connect(G_OBJECT(calculbtn), "clicked", G_CALLBACK(calcul), NULL);
     
       /* Création du bouton quitter */
       Btn_quit_pret = gtk_button_new();
       /* Taille par défaut du bouton quitter prêt */
       gtk_widget_set_size_request(Btn_quit_pret,40,20);
       /* Insertion du bouton quitter */
       gtk_box_pack_start ( GTK_BOX(Vboite_accueil),Btn_quit_pret,TRUE,TRUE,10.10); 
     
       /* Affiche la fenêtre accueil */
       gtk_widget_show_all(Fen_accueil);
       /* boucle évènementielle */
       gtk_main();
     
       return EXIT_SUCCESS;
    }
    void Nouv_pret( gpointer data)
    {
       /* Initialisation des variables pour la fenêtre nouveau pret */
       GtkWidget *Vboite_fen_nouv_pret = NULL;
       GtkWidget *Hboite_fen_nouv_pret_1 = NULL;
       GtkWidget *Hboite_fen_nouv_pret_2 = NULL;
       GtkWidget *Cadre_emprunteur = NULL;
       GtkWidget *Btn_valider = NULL;
       /* variables pour l'emprunteur secondaire */
       GtkWidget *Label_emprunteur_sec = NULL;
       GtkWidget *Salaire_emprunteur_sec = NULL;
     
       /* Création la fenêtre nouveau pret */
       Fen_nouv_pret = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       /* Titre de la fenêtre principale */
       gtk_window_set_title(GTK_WINDOW(Fen_nouv_pret),"- Information sur les emprunteurs -");
       /* Dimension de la fenêtre principale */
       gtk_window_set_default_size(GTK_WINDOW(Fen_nouv_pret),600,400);
       /* Centre la fenêtre */
       gtk_window_set_position(GTK_WINDOW(Fen_nouv_pret), GTK_WIN_POS_CENTER);
       /* signal d'arrêt du programme quand on clique sur la croix de la fenêtre */
       g_signal_connect(G_OBJECT(Fen_nouv_pret), "delete-event",G_CALLBACK(gtk_widget_destroy), NULL);
     
       /* Création du premier cadre pour les emprunteurs */
       Cadre_emprunteur = gtk_frame_new("Revenu");
       gtk_container_add(GTK_CONTAINER(Fen_nouv_pret), Cadre_emprunteur);
     
       /* Création de la boite verticale */
       Vboite_fen_nouv_pret = gtk_vbox_new(FALSE, 0 );
       gtk_container_add(GTK_CONTAINER(Cadre_emprunteur), Vboite_fen_nouv_pret);
     
       /* Création de la 1er boite horizontale */
       Hboite_fen_nouv_pret_1 = gtk_hbox_new(FALSE, 0 );
       gtk_container_add(GTK_CONTAINER(Vboite_fen_nouv_pret), Hboite_fen_nouv_pret_1);
     
       /* Création du texte du label du premier emprunteur */
       Label_emprunteur_prin =gtk_label_new("Emprunteur principal : Votre salaire net par mois :");
       gtk_box_pack_start (GTK_BOX (Hboite_fen_nouv_pret_1), Label_emprunteur_prin, FALSE, FALSE, 0);
       /* Création de la zone de saisie du salaire du premier emprunteur */
       Salaire_emprunteur_prin = gtk_entry_new();
       gtk_box_pack_start (GTK_BOX (Hboite_fen_nouv_pret_1), Salaire_emprunteur_prin, FALSE, FALSE, 0);
     
       /* Création de la 2ème boite horizontale */
       Hboite_fen_nouv_pret_2 = gtk_hbox_new(FALSE, 0 );
       gtk_container_add(GTK_CONTAINER(Vboite_fen_nouv_pret), Hboite_fen_nouv_pret_2);
     
       /* Création du texte du label du second emprunteur */
       Label_emprunteur_sec =gtk_label_new("Emprunteur secondaire : Votre salaire net par mois :");
       gtk_box_pack_start (GTK_BOX (Hboite_fen_nouv_pret_2), Label_emprunteur_sec, FALSE, FALSE, 0);
       /* Création de la zone de saisie du salaire du second emprunteur */
       Salaire_emprunteur_sec = gtk_entry_new();
       gtk_box_pack_start (GTK_BOX (Hboite_fen_nouv_pret_2), Salaire_emprunteur_sec, FALSE, FALSE, 0);
     
       /* Création du bouton valider */
       Btn_valider = gtk_button_new_with_label("Valider");
       gtk_box_pack_end (GTK_BOX (Vboite_fen_nouv_pret), Btn_valider, FALSE, FALSE, 0);
       g_signal_connect(G_OBJECT(Btn_valider), "clicked",G_CALLBACK(Mise_a_jour), NULL);
     
       /* Affiche la fenêtre nouveau pret */
       gtk_widget_show_all(Fen_nouv_pret);
    }
    void Mise_a_jour(GtkWidget *widget, gpointer data)
    {
       /* Initialisation des variables pour les calculs */
       const char *Txt_salaire_1;
       /* Récupération des variables du prêt*/
       Txt_salaire_1 = gtk_entry_get_text(GTK_ENTRY(Salaire_emprunteur_prin));
     
       /* Affiche les informations dans la fenêtre principale */
       gtk_label_set_label(GTK_LABEL(Txt_pret),Txt_salaire_1);
     
       /* Destruction de la fenêtre pour le nouveau pret */
       gtk_widget_destroy(Fen_nouv_pret);
     
    }
    void programme_prin(GtkWidget * widget, gpointer data) 
    {
       /* Destruction de la fenêtre d'accueil */
       gtk_widget_destroy(Fen_accueil);
     
       /* Création la fenêtre principale */
       Fen_prin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       /* Titre de la fenêtre principale */
       gtk_window_set_title(GTK_WINDOW(Fen_prin),"- Bienvenue sur immo -");
       /* Dimension de la fenêtre principale */
       gtk_window_set_default_size(GTK_WINDOW(Fen_prin),800,600);
       /* Centre la fenêtre */
       gtk_window_set_position(GTK_WINDOW(Fen_prin), GTK_WIN_POS_CENTER);
       /* signal d'arrêt du programme quand on clique sur la croix de la fenêtre */
       g_signal_connect(G_OBJECT(Fen_prin), "delete-event",G_CALLBACK(gtk_main_quit), NULL);
     
       /* Création de la boite verticale */
       Vboite_prin = gtk_vbox_new(FALSE, 0 );
       gtk_container_add(GTK_CONTAINER(Fen_prin), Vboite_prin);
     
       /* Création de la barre des outils */
       Barre_outil=gtk_toolbar_new();
       gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre_outil),GTK_STOCK_NEW,"Nouveau",NULL,G_CALLBACK(Nouv_pret),NULL,1);
       gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre_outil),GTK_STOCK_OPEN,"Ouvrir",NULL,NULL,NULL,2);
       gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre_outil),GTK_STOCK_SAVE,"Enregistrer",NULL,NULL,NULL,3);
       gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre_outil),GTK_STOCK_QUIT,"Quitter",NULL,G_CALLBACK(gtk_main_quit),NULL,4);
       gtk_box_pack_start (GTK_BOX (Vboite_prin), Barre_outil, FALSE, FALSE, 0);
     
       /* Création du texte du label */
       Txt_pret =gtk_label_new("\n\n - Aucun calcul de prêt - ");
       gtk_box_pack_start (GTK_BOX (Vboite_prin), Txt_pret, FALSE, FALSE, 0);
     
       /* Affiche la fenêtre principale */
       gtk_widget_show_all(Fen_prin);
       /* Test la variable type */
       type =(gchar*) data;
       if (type =="Nouveau" )
       {
          g_idle_add (Nouv_pret, NULL);
       }
     
    }
    je désire lancer la fonction Nouv_pret. Quand la variable type se trouve égale à Nouveau mais GTK refuse d'exécuter la fonction.

    Il y a peut être d'autres erreurs mais je débute en C et en GTK

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Points : 1 058
    Points
    1 058
    Par défaut
    Je connais pas vraiment le C. Après une rapide lecture, les seusl appels à la fonction Nouv_pret se font dans la fonction programme_prin. La Barre_outil devrait permettre d'appeler ta fonction (sans condition sur la variable type).

    Si tu compte utiliser g_idle_add pour que ta fonction soit appelée dès que type vaut "nouveau", il me semble pas que tu t'y prenne de manière efficace. Ici la valeur de type n'est vérifiée qu'une fois.
    Jette un coup d'œil à la doc. J'aurai :
    utiliser g_idle_add en lui passant comme variable une fonction et type,
    dans cette fonction, je teste la valeur de type,
    je retourne TRUE si type ne vaut pas Nouveau,
    sinon j'éxécute mon traitement et retourne FALSE.
    ZiK un lecteur audio et son blog.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    dessinateur projeteur VRD
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : dessinateur projeteur VRD
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    merci de ton aide mais je n'ai pas très bien saisi ce que tu voulais me dire ( désolé )
    J'ai trouvé la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (type =="Nouveau" )
       {
          Nouv_pret();
       }
    Tout simplement
    dès fois il faut chercher et en revenant quelques jours plus tard ça se débloque...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Les chaînes de caractère ne se comparent pas de cette façon en C, il faut utiliser strcmp pour faire ces comparaisons.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une fonction sans appel de page
    Par Crokan dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2010, 00h07
  2. Réponses: 10
    Dernier message: 27/01/2010, 14h39
  3. [PHP-JS] comment lancer une fonction javascript a partir de php
    Par amika dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2005, 19h23
  4. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32
  5. Comment lancer une fonction
    Par Elois dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 21/04/2004, 19h10

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