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 :

Problème de GtkTable


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Par défaut Problème de GtkTable
    Bonjour à tous!

    Je vous sollicite dans l'espoir que vous trouviez mon erreur, car moi je ne la vois pas!

    J'ai une fonction, init_tab_jeu, qui initialise un tableau de jeu à 0, sauf sur les bords où les cases valent 1.

    Je vous poste un bout du main, là où mon problème se pose.

    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
    int init_tab_jeu (int tab_jeu[NB_LIGNES][NB_COLONNES]);
     
    int i=0,j=0;
     
    for (i=0;i<NB_LIGNES;i++)
    {
     
           for (j=0;j<NB_COLONNES;j++)
           {
            if (tab_jeu[i][j]==0)
                {
                    gtk_table_attach_defaults(table, carre_noir,
                    j, j+1, i, i+1);
                }
     
            if (tab_jeu[i][j]==1)
                {
                    gtk_table_attach_defaults(table, carre_blanc,
                    j, j+1, i, i+1);
                }
           }
     
    }
    avec table définie telle que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table = gtk_table_new(NB_LIGNES, NB_COLONNES, TRUE);
    et carre_noir défini tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    carre_noir = gtk_image_new_from_file("sources/carrenoir.jpg");
    Comment ça se fait que j'observe ça dans ma fenêtre?

    Nom : Sans titre-1 copie.jpg
Affichages : 92
Taille : 26,5 Ko


    Merci à ceux qui prendront le temps de me répondre, et merci d'avance pour vos réponses.

    Cordialement.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    À priori je penche pour un contenu de tab_jeu[][] non conforme à tes attentes. Il doit y avoir autre chose que des 0 et des 1. Affiche en console le contenu de ce tableau dans la boucle j histoire d'être sûr de son contenu.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Par défaut
    Bonjour, merci beaucoup pour ta réponse si rapide!

    Pour ce qui est du tableau de jeu, la fonction est pourtant correcte (je l'avais testée sur ma console en C avant de passer au GTK).

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Si tu es sûr du contenu du tableau alors tu ne peux peut-être pas afficher le même widget à plusieurs endroits. carre_noir (et aussi carre_blanc je suppose) doivent être initialisés à chaque fois que tu veux les insérer dans la table.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Par défaut
    J'ai modifié mon code de la boucle for comme ceci:

    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
    for (i=0;i<NB_LIGNES;i++)
    {
     
           for (j=0;j<NB_COLONNES;j++)
           {
            if (tab_jeu[i][j]==0)
                {
                    gtk_table_attach_defaults(table, carre_noir,
                    j, j+1, i, i+1);
     
                }
     
            if (tab_jeu[i][j]==1)
                {
                    gtk_table_attach_defaults(table, carre_blanc,
                    j, j+1, i, i+1);
                }
                    carre_noir=NULL;
                    carre_noir = gtk_image_new_from_file("sources/carrenoir.jpg");
                    carre_blanc=NULL;
                    carre_blanc = gtk_image_new_from_file("sources/carreblanc.jpg");
           }
     
    }

    et j'obtiens celà :

    Nom : Sans titre-2.jpg
Affichages : 78
Taille : 27,9 Ko


    C'est mieux, mais il me manque encore des carrés ^^

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Il ne faut pas faire comme ca. Tu alloues des widgets qui ne seront jamais utilisés -> perte de mémoire.

    Il faut initialiser dans les {} des if.

    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
    for (i=0;i<NB_LIGNES;i++)
    {
     
           for (j=0;j<NB_COLONNES;j++)
           {
            if (tab_jeu[i][j]==0)
                {
                    gtk_table_attach_defaults(table, gtk_image_new_from_file("sources/carrenoir.jpg"),
                    j, j+1, i, i+1);
     
                }
     
            if (tab_jeu[i][j]==1)
                {
                    gtk_table_attach_defaults(table, gtk_image_new_from_file("sources/carreblanc.jpg"),
                    j, j+1, i, i+1);
                }
           }
    }
    Si ce code fonctionne ensuite il est plus intéressant de ne charger qu'une seule fois les images depuis le disque et ensuite d'en faire des copies en mémoire. Moins d'accés disque.

Discussions similaires

  1. Problème : Midifier une GtkTable Par une fonction
    Par Sephiroth_060 dans le forum GTK+
    Réponses: 0
    Dernier message: 10/05/2009, 14h05
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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