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 :

Position des gtk_dialog et alignement des boutons


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut Position des gtk_dialog et alignement des boutons
    Bonjour,

    Je progresse et m'attaque à l'utilisation des Gtk_Dialog. Ca marche plutôt bien.

    J'ai écrit le bout de code suivant pour intercepter un signal "delete-event". C'est ok. Il ne s'agit juste que d'un exemple. L'appli que je souhaite développer sera (beaucoup) plus riche.

    J'ai juste deux questions :

    1. Comme contrôler la position sur l'écran de la fenêtre qui s'ouvre en pop-up ? J'ai un grand écran, et elle s'ouvre à "l'autre bout" de la fenêtre principale de l'appli. Pas très pratique. Peut-on la centrer sur la fenêtre principale de l'appli ?
    2. Comment centrer les boutons créés sur la fenêtre qui s'ouvre en pop-up ?

    D'avance merci pour toute aide sur ces deux points.

    Cordialement, Eric.

    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
    /* travail sur les gtkdialog */
    #include <gtk/gtk.h>
    #include <gdk/gdkkeysyms.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    GtkWidget *pWindow=NULL;
    char format_sortie[500];  /* chaine qui sert de tempon */
     
    int main(int argc, char **argv)
    {
        gboolean test_fermeture(GtkWidget *widget, GdkEvent  *event, gpointer   user_data); /* fonction call back si tentative de fermeture */
        void OnDestroy(GtkWidget *pWidget, gpointer pData); /* fonction call back destroy */
        /* Initialisation de GTK+ */
        gtk_init(&argc, &argv);
        /* création de la fenetre */
        pWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        /* définition des paramètres de la fenetre */
        gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 750, 210);
        gtk_window_set_title(GTK_WINDOW(pWindow), "Testing Gtk_Dialog..");
        /* Connexion des signaux */
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(OnDestroy), NULL);
        g_signal_connect(G_OBJECT(pWindow), "delete-event", G_CALLBACK (test_fermeture), NULL);
        /*affichage de la fenetre */
        gtk_widget_show_all(pWindow);
        /* Demarrage de la boucle evenementielle */
        gtk_main();
        return EXIT_SUCCESS;
    }
     
    void OnDestroy(GtkWidget *pWidget, gpointer pData)
    {
        /* Arret de la boucle evenementielle */
        gtk_main_quit();
    }
     
    gboolean test_fermeture(GtkWidget *pWindow, GdkEvent  *event, gpointer   user_data)
    {
        /* call back si tentative de fermeture de la fenetre */
        GtkWidget *pQuestion=NULL; /*  boite de dialogue pour poser la question */
        GtkWidget *message_info=NULL; /*  message de la boite de dialogue pour poser la question */
        gchar* sUtf8_question=NULL; /* pour formatter des chaines de charactères */
        int sortie;
        /* création du label */
        message_info=gtk_label_new(NULL);
        (void)sprintf(format_sortie, "\n<span font_desc=\"12\" foreground=\"#000000\"><b>   Etes-vous sûr de quitter ?   </b></span>\n");
        sUtf8_question=g_locale_to_utf8(format_sortie, -1, NULL, NULL, NULL);
        gtk_label_set_markup(GTK_LABEL(message_info), sUtf8_question);
        g_free(sUtf8_question);
        /* création de la boite d'info */
        pQuestion=gtk_dialog_new();
        gtk_dialog_add_buttons(GTK_DIALOG(pQuestion), "Non", 0,"Oui", 1, NULL);
        gtk_dialog_set_has_separator(GTK_DIALOG(pQuestion), TRUE);
        /* ajout du label */
        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pQuestion)->vbox), message_info, TRUE, FALSE, 0);
        /* Affichage de la boite d'info */
        gtk_widget_show_all(GTK_DIALOG(pQuestion)->vbox);
        sortie=(int)gtk_dialog_run(GTK_DIALOG(pQuestion));
        /* Destruction de la boite de message */
        gtk_widget_destroy(GTK_WIDGET(pQuestion));
        if (sortie==1) /* oui on quitte */
            return FALSE;
        else /* Non on reste */
            return TRUE;
        return TRUE;
    }

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    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 395
    Par défaut
    Bonjour,
    pour placer ta fenêtre, essaie gtk_window_set_position. Pour ce qui est de ta boîte de dialogue, je te conseille d'éviter les boîtes de dialogue avec "oui" et "non", ce n'est pas intuitif pour l'utilisateur. Privilégie "quitter" et "annuler". Et puis tu peux utiliser gtk_dialog_new_with_buttons pour créer ta boîte de dialogue. En plus tu n'utilisais pas de stock id pour tes labels "oui" et "non". Normalement tu aurais dû utiliser GTK_RESPONSE_YES et GTK_RESPONSE_NO. Pour la disposition, essaie de conserver celle par défaut, ce n'est en général pas une bonne idée de trop personnaliser une interface, car l'utilisateur ne pourra pas prendre d'habitude.

    Autre chose, il y a une raison pour que tu n'utilises pas GTK 3 ?

  3. #3
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Bonjour,
    pour placer ta fenêtre, essaie gtk_window_set_position. Pour ce qui est de ta boîte de dialogue, je te conseille d'éviter les boîtes de dialogue avec "oui" et "non", ce n'est pas intuitif pour l'utilisateur. Privilégie "quitter" et "annuler". Et puis tu peux utiliser gtk_dialog_new_with_buttons pour créer ta boîte de dialogue. En plus tu n'utilisais pas de stock id pour tes labels "oui" et "non". Normalement tu aurais dû utiliser GTK_RESPONSE_YES et GTK_RESPONSE_NO. Pour la disposition, essaie de conserver celle par défaut, ce n'est en général pas une bonne idée de trop personnaliser une interface, car l'utilisateur ne pourra pas prendre d'habitude.

    Autre chose, il y a une raison pour que tu n'utilises pas GTK 3 ?
    Merci. gtk_window_set_position() fonctionne bien, et répond effectivement à ma première question. J'aurais pu trouver tout seul, mais j'y étais presque..

    Pour le reste, il y a une question posée (en français). La réponse à une question est "oui" ou "non", pas "ok", "yes", "no", "quit" ou "cancel". J'ai évidement commencé avec ca. Je rajoute que je trouve les stock id assez "laid" (dans mon esthétique perso). Je préfère donc des boutons plus explicites, qui plus est en français (plus clair pour les utilisateurs à venir). Je (re)précise par ailleurs que - comme je l'ai dit dans mon post initial - il ne s'agit là que d'un exemple bidon. L'appli que je développe aura d'autres boutons (plus que deux), autant de réponses possibles à la question posée, et ne restera pas dans le cadre du oui/non seulement.

    Enfin, cette remarque ne répond pas à ma question initiale : Comment centrer les boutons créés sur la fenêtre qui s'ouvre en pop-up ?

    Un Gtk_Dialog est en fait une gtk box. J'ai bien réussi à récupérer le widget contenant la zone des boutons avec gtk_dialog_get_action_area(), mais je n'arrive pas à en changer les propriétés pour centrer les boutons.

    Pour le passage à GTK3, j'ai déjà plusieurs milliers de lignes de code avec GTK2. Je sais bien qu'il va falloir que je passe à GTK3, mais j'appréhendre pas mal de sauter le Rubicon, et de repasser des heures à re-debugger tout cas... Je dois être flemmard...

    Merci en tout cas pour votre temps, et merci également si vous avez des idées pour cette histoire de centrage des boutons dans un gtk_dialog.

    Cordialement, Eric.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    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 395
    Par défaut
    Citation Envoyé par eric1708 Voir le message
    Pour le reste, il y a une question posée (en français). La réponse à une question est "oui" ou "non", pas "ok", "yes", "no", "quit" ou "cancel". J'ai évidement commencé avec ca.
    Si je te dis ça c'est tout bonnement parce que c'est une mauvaise pratique en conception d'interface graphique, tout simplement parce que les utilisateurs ne lisent pas les questions, et ne regardent que les boutons. Or "oui" et "non" ne donnent pas de contexte sur la question. "quitter" et "annuler", si. Dans les boutons, on privilégie les verbes afin d'indiquer une action. Je te conseille la lecture des GNOME HIG (Human Interface Guidelines) qui t'informeront des bonnes pratiques.
    https://developer.gnome.org/hig-book...-alert.html.fr

    Citation Envoyé par eric1708 Voir le message
    Je rajoute que je trouve les stock id assez "laid" (dans mon esthétique perso). Je préfère donc des boutons plus explicites, qui plus est en français (plus clair pour les utilisateurs à venir). Je (re)précise par ailleurs que - comme je l'ai dit dans mon post initial - il ne s'agit là que d'un exemple bidon. L'appli que je développe aura d'autres boutons (plus que deux), autant de réponses possibles à la question posée, et ne restera pas dans le cadre du oui/non seulement.
    Le stock id, c'est juste un texte standard qui te permettra d'avoir aussi les traductions associées. Je vois donc mal comment ça peut être laid. Si tu parles des icônes associées, elles ne sont pas obligatoirement affichées, c'est une option de GTK.

    Citation Envoyé par eric1708 Voir le message
    Enfin, cette remarque ne répond pas à ma question initiale : Comment centrer les boutons créés sur la fenêtre qui s'ouvre en pop-up ?

    Un Gtk_Dialog est en fait une gtk box. J'ai bien réussi à récupérer le widget contenant la zone des boutons avec gtk_dialog_get_action_area(), mais je n'arrive pas à en changer les propriétés pour centrer les boutons.
    action_area est un GtkHButtonBox. Tu peux donc ensuite appeler gtk_button_box_set_layout avec le style GTK_BUTTONBOX_CENTER.

    Citation Envoyé par eric1708 Voir le message
    Pour le passage à GTK3, j'ai déjà plusieurs milliers de lignes de code avec GTK2. Je sais bien qu'il va falloir que je passe à GTK3, mais j'appréhendre pas mal de sauter le Rubicon, et de repasser des heures à re-debugger tout cas... Je dois être flemmard...
    Dans ce cas, je te conseille de passer à Glade pour concevoir tes interfaces graphiques, car tu as besoin de moins de code pour les réaliser, ce qui les rend plus maintenables.

  5. #5
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Merci pour votre réponse, très riche et intéressante, et donc très utile.

    Ok pour le centrage des boutons dans un GtkDialog. Ca marche bien !

    Encore merci !

    Eric.

  6. #6
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Le stock id, c'est juste un texte standard qui te permettra d'avoir aussi les traductions associées. Je vois donc mal comment ça peut être laid. Si tu parles des icônes associées, elles ne sont pas obligatoirement affichées, c'est une option de GTK.
    Je reprends ce post. Oui, je parle des icônes associées, comme par exemple le rond vert et le rond rouge générés par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_dialog_new_with_buttons("titre", GTK_WINDOW(pWindow), GTK_DIALOG_MODAL, GTK_STOCK_YES, 1, GTK_STOCK_NO,0, NULL );
    Vous parlez du fait qu'elles ne sont pas obligatoires. Je n'ai pas trouvé comment les virer.

    Par ailleurs, vous mentionnez qu'on peut avoir aussi les traductions associées aux stock id. Je ne les ai qu'en Englais.

    Pourriez-vous s'il vous plait préciser ces deux points ?

    D'avance merci,

    Cordialement, Eric.

  7. #7
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    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 395
    Par défaut
    Citation Envoyé par eric1708 Voir le message
    Vous parlez du fait qu'elles ne sont pas obligatoires. Je n'ai pas trouvé comment les virer.
    http://www.developpez.net/forums/d86...n/#post1792778

    Citation Envoyé par eric1708 Voir le message
    Par ailleurs, vous mentionnez qu'on peut avoir aussi les traductions associées aux stock id. Je ne les ai qu'en Englais.
    Ça dépend des fichiers de langue que tu as d'installé avec ton GTK, mais si l'installation est correcte, du dois avoir un fichier .mo contenant toutes les traductions pour chacune des langues. Il faut aussi vérifier la langue de ton système, sous Linux c'est avec la commande locale, sous Windows, je me souviens avoir dû faire un fichier .bat pour pouvoir lancer un logiciel dans la lanque de mon choix.

    Essie de mettre ce fichier .bat dans le même dossier que ton application, et replace "monapplication.exe" par le nom de ton exécutable. Puis lance le .bat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=fr_FR .\monapplication.exe

  8. #8
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Décembre 2012
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 195
    Par défaut
    Citation Envoyé par liberforce Voir le message
    http://www.developpez.net/forums/d86...n/#post1792778



    Ça dépend des fichiers de langue que tu as d'installé avec ton GTK, mais si l'installation est correcte, du dois avoir un fichier .mo contenant toutes les traductions pour chacune des langues. Il faut aussi vérifier la langue de ton système, sous Linux c'est avec la commande locale, sous Windows, je me souviens avoir dû faire un fichier .bat pour pouvoir lancer un logiciel dans la lanque de mon choix.

    Essie de mettre ce fichier .bat dans le même dossier que ton application, et replace "monapplication.exe" par le nom de ton exécutable. Puis lance le .bat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=fr_FR .\monapplication.exe
    Ok, je n'arrive pas à enlever les icônes associés aux boutons, mais ce n'est pas grave, j'ai trouvé une autre solution.

    Par ailleurs, c'était effectivement la variable d’environnement LC_ALL=fr_FR qui n'était pas définie chez moi. Le problème est résolu à présent.

    Encore merci !

    Eric.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/05/2014, 15h19
  2. Réponses: 1
    Dernier message: 28/06/2012, 16h04
  3. Réponses: 1
    Dernier message: 27/04/2012, 16h41
  4. aligner des boutons?.
    Par piotrr dans le forum Tkinter
    Réponses: 8
    Dernier message: 27/05/2007, 08h19
  5. [XML] alignement des boutons
    Par cisse18 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 24/02/2006, 14h44

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