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 :

Affichage d'un tableau modifié


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut Affichage d'un tableau modifié
    Bonjour,
    Je suis nouveau sur le site donc je vais essayer d'expliquer au mieux.

    Alors mon problème est le suivant j'essaye de changer la forme (ajouter des lignes) d'un tableau déjà présent dans ma fenêtre principal mais rien n'y fait.
    Sur les deux idées que j'ai eu aucune ne fonctionnent. La première l'affichage ne change pas et avec la seconde j'obtiens une erreur de segmentation.

    J'ai simplifier mon code au maximum pour que ça soit plus clair.

    1ere idée: J'ai créé mon tableau avec sur une ligne le bouton pour ajouter une ligne et sur une seconde ligne un label pour voir mon nbl

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    static GtkWidget *pWindow;
    int nbl=0; //va me permettre d'ajouter un ligne a chaque fois
    GtkWidget *texte;
        GtkWidget **texte2;
    GtkWidget *Table;
     
    void addline(void);
     
    int main(int argc, char **argv)
    {
        GtkWidget *pVBox;
        GtkWidget **pButton;
        GtkWidget *Button;
     
        gchar *temp;
        int i,j;
     
        gtk_init(&argc, &argv);
     
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(pWindow), "GtkDialog");
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 600, 400);
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        Table=gtk_table_new(nbl+2,1,FALSE);
        gtk_container_add(GTK_CONTAINER(pWindow), GTK_WIDGET(Table));
     
        Button = gtk_button_new_with_label("Ajouter une ligne");
        gtk_table_attach(GTK_TABLE(Table), Button,
            0, 1, 0, 1,
            GTK_EXPAND | GTK_FILL, GTK_EXPAND,
            0, 0);
     
        texte = gtk_label_new(NULL);
        gtk_table_attach(GTK_TABLE(Table), texte,
            0, 1, 1, 2,
            GTK_EXPAND | GTK_FILL, GTK_EXPAND,
            0, 0);
     
        for (i=2; i<=nbl; i++)
        {
        texte2[i] = gtk_label_new("blabla");
        gtk_table_attach(GTK_TABLE(Table), texte2[i],
            0, 1, i, i+1,
            GTK_EXPAND | GTK_FILL, GTK_EXPAND,
            0, 0);
        }
     
        g_signal_connect(G_OBJECT(Button), "clicked", G_CALLBACK(addline), NULL);
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
     
    void addline (void)
    {
        // Me permet de mettre mon nbl a jour et le label me permet de voir si elle est bien mise a jour
        int i;
     
        nbl++;
     
        const gchar* text;
        text=g_strdup_printf("Nombre de ligne %d",nbl);
        gtk_label_set_text(GTK_LABEL(texte), text);
    }
    2eme idée: J'ai utilisé un box vertical dans laquelle je met d'abord mon bouton d'ajout de ligne puis mon label et enfin mon tableau

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    static GtkWidget *pWindow;
    int nbl=0; //va me permettre d'ajouter un ligne a chaque fois
    GtkWidget *texte;
     
    GtkWidget *Table;
     
    void addline(void);
     
    int main(int argc, char **argv)
    {
        GtkWidget *pVBox;
        GtkWidget *Button;
     
        gchar *temp;
        int i,j;
     
        gtk_init(&argc, &argv);
     
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(pWindow), "GtkDialog");
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 600, 400);
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
     
        pVBox = gtk_vbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
     
        Button = gtk_button_new_with_label("Ajouter une ligne");
        gtk_box_pack_start(GTK_BOX(pVBox), Button, FALSE, FALSE, 0);
     
        texte = gtk_label_new(NULL);
        gtk_box_pack_start(GTK_BOX(pVBox), texte, FALSE, FALSE, 0);
     
        Table=gtk_table_new(nbl,1,FALSE);
        gtk_container_add(GTK_CONTAINER(pVBox), GTK_WIDGET(Table));
     
        g_signal_connect(G_OBJECT(Button), "clicked", G_CALLBACK(addline), NULL);
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
     
    void addline (void)
    {
        int i;
        GtkWidget **texte2;
     
        nbl++;
     
        const gchar* text;
        text=g_strdup_printf("Nombre de ligne %d",nbl);
        gtk_label_set_text(GTK_LABEL(texte), text);
     
        for (i=1; i<=nbl; i++)
        {
        texte2[i] = gtk_label_new("blabla");
        gtk_table_attach(GTK_TABLE(Table), texte2[i],
            0, 1, i, i+1,
            GTK_EXPAND | GTK_FILL, GTK_EXPAND,
            0, 0);
        }
     
    }
    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Portugal

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2009
    Messages : 27
    Par défaut
    C'est ça que tu veux faire?
    si tu veux ajouter plusieurs lignes utilise un cycle 'for'.

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    #define ROWS 5
    #define COLUMNS 1
     
    int nbl=1; //va me permettre d'ajouter un ligne a chaque fois
    GtkWidget *lbl_count;
    GtkWidget *lbl_out[ROWS];
    GtkWidget *tbl;
     
    void cb_addline (GtkWidget *button, gpointer *data);
     
    int main (int argc, char **argv)
    {
    	static GtkWidget *window;
    	GtkWidget *vbox;
    	GtkWidget *btn_add;
     
    	gtk_init(&argc, &argv);
     
    	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_title (GTK_WINDOW(window), "GtkDialog");
    	gtk_window_set_default_size (GTK_WINDOW(window), 600, 400);
    	g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
    	vbox = gtk_vbox_new (FALSE, 0);
    	gtk_container_add (GTK_CONTAINER(window), vbox);
     
    	tbl=gtk_table_new (ROWS,1,FALSE);
    	gtk_box_pack_start (GTK_BOX(vbox), tbl, FALSE, FALSE, 0);
     
    	btn_add = gtk_button_new_with_label ("Ajouter une ligne");
    	gtk_table_attach (GTK_TABLE(tbl), btn_add,
    		0, 1, 0, 1,
    		GTK_EXPAND | GTK_FILL, GTK_EXPAND,
    		0, 0);
     
    	lbl_count = gtk_label_new (NULL);
    	gtk_box_pack_start (GTK_BOX(vbox), lbl_count, FALSE, FALSE, 0);
    	g_signal_connect (G_OBJECT(btn_add), "clicked", G_CALLBACK(cb_addline), &lbl_out);
     
    	gtk_widget_show_all (window);
     
    	gtk_main ();
     
        return EXIT_SUCCESS;
    }
     
    void cb_addline (GtkWidget *button, gpointer *data)
    {
     
    	if (nbl < ROWS)
    	{
    		data[nbl] = gtk_label_new("blabla");
    		gtk_table_attach (GTK_TABLE(tbl), data[nbl],
    			0, 1, nbl, nbl+1,
    			GTK_EXPAND | GTK_FILL, GTK_EXPAND,
    			0, 0);
     
    		gtk_widget_show_all (tbl);
     
    		nbl++;
    		const gchar *string;
    		string = g_strdup_printf("Nombre de ligne %d",nbl);
    		gtk_label_set_text (GTK_LABEL(lbl_count), string);
    	}
    	else
    		g_print ("Atteint le limite!");
    }

  3. #3
    Membre Expert
    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
    Par défaut
    Tu parles de tableaux, je suis surpris que tu n'utilises pas http://gtk.developpez.com/cours/listes-arbres/

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut
    Merci 0xpoint, ta solution marche comme je le voulais.

    Pour te répondre, teuf, c'est juste que je commence gtk+ et je ne me suis pas encore plongé dans les listes-arbres.

    Encore une fois merci de vos conseils

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/04/2015, 16h19
  2. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  3. Prob d'affichage d'un tableau resultant d'u...
    Par Yohips dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 08/12/2004, 17h23
  4. [MFC] Affichage d'un tableau
    Par SethPech dans le forum MFC
    Réponses: 7
    Dernier message: 23/02/2004, 15h48
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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