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 :

GTK & scroll


Sujet :

GTK+

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut GTK & scroll
    Bonjour à tous,

    Bah je me présente vite fait, Benoît, en stage, voila ca c'est fait
    donc je suis amené pour mon stage à developper une interface graphique en C sous GTK (rolala 1 an sans faire de C et une librairie inconnu)

    Bref, cela fait 2/3 semaines que je suis sur GTK et j'ai un petit soucis :

    j'ai créé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau[0].ZoneListeM = gtk_tree_view_new_with_model(GTK_TREE_MODEL(p_model));
    l'affichage marche niquel mais comme ma liste est trop grande elle déborde de mon écran, et sans scroll impossible de tout voir, donc je décide d'en faire un via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pScrollbar = gtk_scrolled_window_new(NULL, NULL);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW  
                     (pScrollbar),GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     gtk_container_add(GTK_CONTAINER(pScrollbar), tableau[0].ZoneListeM);

    et la boum surprise, ma zone (elle est dans un layout) fait 1cm sur 1
    on peut bouger sur le coté et en haut , il y a bien mon texte dedans, mais bon on voit rien, et je n'ais rien trouver pour définir la taille de ma zone, quelqu'un pourrait m'aider s'il vous plait (la date de fin de projet arrive a grand pas, plus que 11jours ) ?

    Merci d'avance

  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 : 46
    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
    Salut et bienvenue sur les forums de developpez.com


    Comment as-tu inséré ton GtkScrolledWindow ? Sur quel conteneur et comment celui-ci à été créé et inséré dans la fenêtre ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    euh le plus simple a mon avis est de montrer comment j'ai fait

    voici le code (j'ai enlevé ce qui ne concerné pas le cas présent)

    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
     
        GtkListStore * p_model;
        p_model = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
        GtkTreeIter iter;
        int i, nombrelement = LectureFichier("tutu2.txt", tableau[0].element);
        for(i = 0; i < nombrelement; i++){
              gtk_list_store_append(p_model, &iter);
              TexteConverti = g_locale_to_utf8(tableau[0].element[i].nom, -1, NULL, NULL, NULL);
              TexteConverti2 = g_locale_to_utf8(tableau[0].element[i].prenom, -1, NULL, NULL, NULL);
              gtk_list_store_set(p_model, &iter, 0, TexteConverti, 1, TexteConverti2,2 , tableau[0].element[i].code,4 , 0, -1);
        }
        /* Affichage de la liste */
        GtkCellRenderer *renderer;
        GtkTreeViewColumn *column1;
        GtkTreeViewColumn *column2;
        GtkTreeViewColumn *column3;
        GtkTreeViewColumn *column4;
        tableau[0].ZoneListeM = gtk_tree_view_new_with_model(GTK_TREE_MODEL(p_model));
        renderer = gtk_cell_renderer_text_new();
        column1 = gtk_tree_view_column_new_with_attributes("Nom", renderer, "text", 0, NULL);
        column2 = gtk_tree_view_column_new_with_attributes("Prenom", renderer, "text", 1, NULL);
        column3 = gtk_tree_view_column_new_with_attributes("No Badge", renderer, "text", 2, NULL);
        gtk_tree_view_insert_column(tableau[0].ZoneListeM, column1, 2);
        gtk_tree_view_insert_column(tableau[0].ZoneListeM, column2, 2);
        gtk_tree_view_insert_column(tableau[0].ZoneListeM, column3, 2);
        gtk_tree_view_insert_column(tableau[0].ZoneListeM, column4, 2);
        gtk_tree_view_set_headers_visible(tableau[0].ZoneListeM, TRUE); //masquer ou non le titre des colonnes
        GtkWidget *pScrollbar;
        pScrollbar = gtk_scrolled_window_new(NULL, NULL);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar),GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
        gtk_container_add(GTK_CONTAINER(pScrollbar), tableau[0].ZoneListeM);
        gtk_layout_put (Layout,pScrollbar,550,100);

  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 : 46
    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
    Comment as-tu inséré le Layout dans ta fenêtre ? Perso je n'ai jamais utilisé ce widget ! Normalement on utilise la fonction gtk_scrolled_window_add_with_viewport pour ajouter un widget dans un GtkScrolledWindow !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Layout = gtk_layout_new (NULL,NULL);
        gtk_container_add(GTK_CONTAINER(MainWindow), GTK_WIDGET(Layout));
    je vais tester ta fonction pour voir

    sinon en passant, j'ai une petite question, il y a quoi dans :
    GtkWidget *widget, gpointer data
    on passe ca dans les fonctions appelées par événement, mais il y a quoi dedans?

    et j'ai vu un post que tu as résolu concernant les boites de dialogue, j'ai essayé d'en faire une, en prenant le code "résolu" donc bon, et j'ai une erreur

    <Projet.exe:3020>: Gtk-CRITICAL **: gtk_widget_destroy: assertion `GTK_IS_WIDGET <widget>`failed

    je ne comprend pas trop le sens: je pose le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
           GtkWidget  *boiteinfo = NULL;
           GtkWidget *win = GTK_WIDGET (data);
     
           boiteinfo = gtk_message_dialog_new(GTK_WINDOW(win),GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,"Information");
     
           gtk_window_set_title (GTK_WINDOW (boiteinfo), "Un titre...");
     
           gtk_window_set_position(GTK_WINDOW (boiteinfo),GTK_WIN_POS_CENTER);
           gtk_dialog_run(GTK_DIALOG(boiteinfo));
           gtk_widget_destroy (boiteinfo);

  6. #6
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Je viens de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GtkWidget *scroll = gtk_scrolled_window_new(NULL,NULL);
    gtk_scrolled_window_add_with_viewport(scroll,tableau[0].ZoneListeM);
    gtk_layout_put (Layout,scroll,550,100);
    et j'ai toujours ma zone "scrollée" qui fait 1cm sur 1

    voila un lien pour montrer :
    http://img224.imageshack.us/my.php?image=zutny2.jpg

  7. #7
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour et et bienvenue sur le forum

    Je ne pense pas que le GtkLayout soit utile (jamais utilisé cette bête là).

    Comment ajouter des barres de défilement à un widget ?

    Donc tu as juste à placer ton GtkTreeView dans un GtkScrolledWindow (avec gtk_container_add) et ce dernier directement dans la fenêtre (sauf si tu à d'autres widgets à mettre, dans ce cas utilise les box ).

  8. #8
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Bonjour et merci

    comme tu peux le voir dans mes 2 messages précédents, j'ai essayé les 2 méthodes et rien n'y fait.

    Le layout est necessaire pour ma part, il sert a positionner les éléments dans la fenetre, j'avais essayé avec une table avant, mais c'est du grand n'importe quoi les tables.

    comme tu peux le voir sur le screen, il y a pas mal d'éléments dans le layout c'est sur que si c'était juste pour un widget, je suis d'accord, ca ne servirait a rien

  9. #9
    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 : 46
    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
    Bon si tu veux à tout prix garder le Layout, regarde voir pour changer la taille préférée de ton GtkScrolledWindow avec la fonction gtk_widget_set_size_request et idem dans le pire des cas pour ton GtkTreeView mais je te promet rien
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Membre à l'essai
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    yess merci

    la solution c'était ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gtk_widget_set_size_request(scroll,400,400);
    gtk_layout_put (Layout,scroll,550,100);
    Merci beaucoup

    Je retire ma question, je met résolu, et je la poserais dans un autre post ^^

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

Discussions similaires

  1. [GTK+] Scroll auto dans un GtkTextView
    Par jexxo dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 10/09/2009, 11h43
  2. [Kylix] Kylix GTK et QT
    Par mailstef dans le forum EDI
    Réponses: 2
    Dernier message: 19/11/2002, 21h53
  3. [GTK]PB Librairie GTK+ sous dev-c++
    Par wozzy dans le forum Dev-C++
    Réponses: 15
    Dernier message: 05/11/2002, 14h55
  4. scroll dans un label
    Par Pretender dans le forum Composants VCL
    Réponses: 9
    Dernier message: 27/09/2002, 17h06

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