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 :

Ouvrir plusieurs boites de dialogues les unes après les autres


Sujet :

GTK+ avec C & C++

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 602
    Points : 7 837
    Points
    7 837
    Par défaut Ouvrir plusieurs boites de dialogues les unes après les autres
    Bonjour

    Je viens de faire un test de gtk. J'ai voulu ouvrir plusieurs boîtes de dialogues l'une après l'autre. Suite à une erreur bête, on m'a donné plein de conseils qui m'ont fait réfléchir. Voici les questions qui en sont resorties :

    1)
    Pourquoi ne pas ouvrir ces boites avec gtk_main (); et les fermer avec gtk_main_quit(); ?
    Si le système est fait correctement, je ne vois pas de problème. C'est à dire qu'il faut fermer une boite avant d'ouvrir l'autre.

    2)
    On peut faire ceci avec gtk_dialog_new_with_buttons, cette boite de dialogue n'utilise pas les deux fonctions du 1). Mais il va falloir que je trouve une explication des différentes boites qui existent !


    Qu'en pensez-vous ?

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    La bonne programmation avec GTK+ veut que l'on créé la fenêtre principale avec un GtkWindow donc en somme, l'entrée du programme qui se fait avec gtk_main et sa fermeture avec gtk_main_quit ce qui implique la plupart du temps l'arrêt du programme ou du moins la prévision de sortie du processus principal.

    Pour faire des fenêtres dans la même application on utilise ce qu'on appel des boîtes de dialogues donc des GtkDialog qu'on peut considérer comme des fenêtres plus spécialisées si on veut.

    Par ailleurs les GtkDialog sont là pour ca...


    Citation Envoyé par troumad
    Mais il va falloir que je trouve une explication des différentes boites qui existent !
    Imagine ton navigateur web et des fenêtres popup...

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 602
    Points : 7 837
    Points
    7 837
    Par défaut
    Donc, tu n'es pas d'accord avec mon idée 1)

    Citation Envoyé par Franck.H
    Imagine ton navigateur web et des fenêtres popup...
    Je voulais dire quelle fenêtre pour faire quoi ! Une doc...

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par troumad
    Donc, tu n'es pas d'accord avec mon idée 1)
    Si tu ne possède qu'une seule fenêtre principale, comme par exemple un éditeur de texte, non je ne suis pas d'accord car les GtkDialog sont là pour créer des fenêtre popup. Si tu possède une telle interface, tes autres fenêtres ne seront en générale que des fenêtres filles donc en somme des popup.

    Si maintenant tu désires mettre en place une interface comme par exemple Gimp, tu pourrais utiliser plusieures GtkWindow mais je n'utiliserais pas directement alors gtl_main mais plutot g_main_loop_new tout comme c'est le cas avec les GtkDialog pour leur fonction de lancement gtk_dialog_run !

    La grosse différence entre un GtkWindow réside surtout dans la gestion des événements. En effet, en appelant la fonction gtk_dialog_run, celle-ci attend une réponse à un événement qu'elle renvoie puis met fin immédiatement à la boîte de dialogue. Ces fenêtre sont donc là pour avoir une durée de vie très limité.

    Voici les utilisation que j'en fairais:
    • GtkWindow : Fenêtre principale d'un programme, fenêtre d'outils (comme Gimp par exemple ou encore inkscape), fenêtre de réglages (toujours dans les mêmes exemples de programmes)...
    • GtkDialog : Fenêtre de messages personnalisée, préférences des programmes et autres fenêtres de ce type...


    Je ne pense pas qu'il existe réellement de documentation sur ce genre de sujet car ce genre de questions ne sont jamais posées en fait, ce ne sont que des avis par rapport à mon expérience personnelle

    Tu peux voir un peu comment fonctionne le GtkDialog et sa fonction gtk_dialog_run en téléchargeant les sources de GTK+


    Voici pour un info la partie qui permet de gérer un Thread pour les GtkDialog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      ri.loop = g_main_loop_new (NULL, FALSE);
     
      GDK_THREADS_LEAVE ();  
      g_main_loop_run (ri.loop);
      GDK_THREADS_ENTER ();  
     
      g_main_loop_unref (ri.loop);
     
      ri.loop = NULL;
    Donc nullement besoin de gtk_main et gtk_main_quit qui eux travail directement avec le processus principal.

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 602
    Points : 7 837
    Points
    7 837
    Par défaut
    OK !

    Merci

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

Discussions similaires

  1. lancement de fonction les unes après les autres
    Par fflo4ever dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 19/03/2010, 10h32
  2. Afficher deux courbes les unes après les autres
    Par gmachi10 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 09/07/2008, 09h49
  3. Réponses: 9
    Dernier message: 24/01/2008, 12h53
  4. Réponses: 32
    Dernier message: 28/08/2007, 19h57
  5. [Débutant] Charger et afficher des images les unes apres les autres
    Par kharon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/03/2007, 08h51

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