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 :

besoin aide gtk+


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut besoin aide gtk+
    bonjour,

    j'ai un petit soucis dans la compréhension de l'utilisation de gtk+.
    J'utilise cett bibliothèque pour faire une interface graphique à un programme multi thread d'intelligence artificielle que j'ai fait.
    En fait si je comprends bien tout fonctionne par événements, le truc c'est qu'en fait dans mon programme il n' y a pas d'événement, c'est juste de l'affichage de texte et de dessins.
    Je voudrais savoir comment faire pour programmer qq chose qui va s'éxécuter pendant le déroulement de gtk_main(). En gros où je lance mes boucles de thread ?
    Faut t-il ajouter un callback sur la fenêtre autre que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    G_CALLBACK(gtk_main_quit)
    ?

    merci
    Log

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut
    tient en jetant un coup d'oeil au forum j'ai trouvé ça :
    http://gtk.developpez.com/faq/?page=...BOUCLE_idleadd

    Peut être que ça résoudrait mon pb nan ?

    J'essaierai dès que je retourne sous linux

    Log

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut
    bon ça a l'air de fonctionner....
    en revanche j'ai un pb bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Prog:7370): Gtk-CRITICAL **: gtk_label_set_markup: assertion `GTK_IS_LABEL (label)' failed
    en fait j'essaye de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_label_set_markup(GTK_LABEL(pLabel),"test affichage classique");
    ça marche très bien quand je le fais dans le main mais là je suis pas dans le main je suis dans une classe de mon programme. Je récupère un pointeur sur le label "pLabel" et j'essaye de changer sa valeur

    vous voyez le pb ?

    merci
    Log

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par logarithme1984
    en revanche j'ai un pb bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Prog:7370): Gtk-CRITICAL **: gtk_label_set_markup: assertion `GTK_IS_LABEL (label)' failed
    en fait j'essaye de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_label_set_markup(GTK_LABEL(pLabel),"test affichage classique");
    ça marche très bien quand je le fais dans le main mais là je suis pas dans le main je suis dans une classe de mon programme. Je récupère un pointeur sur le label "pLabel" et j'essaye de changer sa valeur

    vous voyez le pb ?
    Oui pLabel ne contient pas l'adresse un GtkLabel. Le plus simple serait que tu poste un peux de code

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 60
    Par défaut
    bon alors j'ai changé qq trucs et j'ai plus le message d'erreur mais ça ne marche toujours pas. Voici comment c'est fait :
    je suis dans une classe chef_exploit, qui a un attribut privé GtkWidget* pLabel
    Dans le constructeur j'initialise ce label qui est passé en argument.

    Tous les éléments de la fenêtre sont créés dans mon main à partir de variables static :

    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
    gtk_init(&argc,&argv);
       	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_title(GTK_WINDOW(pWindow), "Les GtkBox");
        	gtk_window_set_default_size(GTK_WINDOW(pWindow),640, 480);
        	g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    	g_idle_add(fonction_thread,(gpointer)NULL);
     
    	/* Creation de la GtkBox verticale */
        	pHBox = gtk_hbox_new(TRUE, 0);
       	 /* Ajout de la GtkVBox dans la fenetre */
        	gtk_container_add(GTK_CONTAINER(pWindow), pHBox);
     
       	 /* Creation des boutons */
        	pLabel = gtk_label_new(NULL);
        	gtk_label_set_justify(GTK_LABEL(pLabel), GTK_JUSTIFY_LEFT);
     
        	pDrawing = gtk_drawing_area_new() ;
     
        	gtk_box_pack_start(GTK_BOX(pHBox), pLabel, TRUE, FALSE, 0);
        	gtk_box_pack_start(GTK_BOX(pHBox), pDrawing, TRUE, TRUE, 0);
        	g_signal_connect( G_OBJECT(pDrawing), "realize", G_CALLBACK(realisation), NULL ) ;
        	g_signal_connect( G_OBJECT(pDrawing), "expose_event", G_CALLBACK(rafraichissement), NULL ) ;
     
        	gtk_widget_show_all(pWindow);
     
    	gtk_main();
    dans l'éxécution parallele au main je fais (g_idle_add):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chef_exploitants* chef1 = new chef_exploitants(pLabel);
    Et puis ensuite dans une des méthodes de ma classe chef_exploit je veux afficher des trucs dans le label et je n'y arrive pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_label_set_markup(GTK_LABEL(pLabel),"test affichage classique");
    sachant que si je met ce code dans le main directement ça marche.....

    voilà j'espère que c'est plus kler mais c'est pas facile parce que c'est un programme assez gros.....
    Il est peut être important de noter que la classe chef_exploit est instanciée et utilisée dans une routine de thread...

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par logarithme1984
    sachant que si je met ce code dans le main directement ça marche.....
    Vu que l'exécution est en parallèle, tu es sûr que le chef_exploitants est bien initialisé lorsque tu veux modifier le widget ?

    Citation Envoyé par logarithme1984
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chef_exploitants* chef1 = new chef_exploitants(pLabel)
    C'est du C++, je ne sais pas si le mélange des classes GTK+ et C++ soit une bonne idées

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

Discussions similaires

  1. besoin aide pour requête compliquée ......
    Par Ickou dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/04/2006, 17h43
  2. [Thread][Progressmonitor] Besoin aide
    Par david06600 dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 02/03/2006, 21h43
  3. Réponses: 9
    Dernier message: 10/02/2006, 17h24
  4. [HTML] Besoin aide sur scroll et balise
    Par Kerod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 24/03/2005, 14h42
  5. débutant : besoin aide
    Par simon76 dans le forum Flash
    Réponses: 6
    Dernier message: 14/08/2003, 16h03

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