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 :

GTK & fenetre


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut GTK & fenetre
    Re voila, alors c'est un problème mineur, mais génant, mon programme (comme les habitués de mes lectures le savent) lit le port série, et, ma fenetre principale "disparait" tant que rien n'est détecté sur le port série. Petit exemple :

    je lance mon programme, je choisis le mode automatique, ma fenetre disparait, je ne fais rien, elle réapparait pas, je passe un badge, elle trouve des données sur le port série, elle réapparait. Mais la question est pourquoi disparait-elle? je met le code, ce sera plus simple je pense pour trouver "le coupable" (il est un peu long ^^)
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    //**********************************************************************************************/
    //                                                                                             //
    //                  C R E A T I O N    D U    M E N U    A U T O M A T I Q U E                 //
    //                                                                                             //
    //**********************************************************************************************/
    void ModeAuto(GtkWidget *widget, gpointer data, GtkWidget * MainWindow, GtkWidget * WindowManu)
    {    
        gtk_widget_destroy(MainWindow);
        gtk_widget_destroy(WindowManu);
        /* Variables */
        GtkWidget * WindowAuto = NULL;
        GtkWidget * LabelGeneral = NULL;
        GtkWidget * LabelNomM = NULL;
        GtkWidget * LabelPrenomM = NULL;
        GtkWidget * LabelNoBadgeM = NULL;
        GtkWidget * LabelSoldeM = NULL;
        GtkWidget * LabelNbRepM = NULL;
        GtkWidget * LabelNbReloadM = NULL;
        GtkWidget * Layout = NULL;
        GtkWidget * pButton[4];
        /* Création de la fenêtre */
        WindowAuto = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(WindowAuto), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
        gtk_window_set_title(GTK_WINDOW(WindowAuto), "Mode Automatique");
        gtk_window_set_default_size(GTK_WINDOW(WindowAuto), 1024, 768);
        gtk_window_set_position(GTK_WINDOW(WindowAuto), GTK_WIN_POS_CENTER);
        Layout = gtk_layout_new (NULL,NULL);
        gtk_container_add(GTK_CONTAINER(WindowAuto), GTK_WIDGET(Layout));
        /*Couleur bleu pale du layout*/
        	GdkColor color;
    	//RGB(246^2,249^2,252^2)
    	color.pixel = 0;
    	color.red=60516;
    	color.green=62001;
    	color.blue=63504;
    	gtk_widget_modify_bg(GTK_WIDGET(Layout), GTK_STATE_NORMAL, &color);
    //Création du "menu"
        /* Creation des boutons */
        pButton[0] = gtk_button_new_with_label("Mode Manu");
        pButton[1] = gtk_button_new_with_label("Retour Accueil");
        pButton[2] = gtk_button_new_with_label("Quitter");
        pButton[3] = gtk_button_new_with_label("Valider");
        /* Positionnement des Boutons */
        gtk_layout_put (GTK_LAYOUT(Layout),pButton[3],500,400);
        gtk_layout_put (GTK_LAYOUT(Layout),pButton[1],600,400);
        gtk_layout_put (GTK_LAYOUT(Layout),pButton[0],500,450);
        gtk_layout_put (GTK_LAYOUT(Layout),pButton[2],600,450);
        /* Création des labels */
        LabelGeneral = gtk_label_new("");
        LabelNomM = gtk_label_new("");
        LabelPrenomM = gtk_label_new("");
        LabelNoBadgeM = gtk_label_new("");
        LabelSoldeM = gtk_label_new("");
        LabelNbRepM = gtk_label_new("");
        LabelNbReloadM = gtk_label_new("");
        /* Initialisation des labels */
        gtk_label_set_markup(GTK_LABEL(LabelGeneral), "<span font_desc=\"Times New Roman italic 48\"foreground=\"#0000FF\">Mode Automatique</span>\n");
        gtk_label_set_markup(GTK_LABEL(LabelNomM), "<span font_desc=\"Times New Roman 12\">Nom : </span>\n");
        gtk_label_set_markup(GTK_LABEL(LabelPrenomM), "<span font_desc=\"Times New Roman 12\">Prenom : </span>\n");
        gtk_label_set_markup(GTK_LABEL(LabelNoBadgeM), "<span font_desc=\"Times New Roman 12\">No Badge : </span>\n");
        gtk_label_set_markup(GTK_LABEL(LabelSoldeM), "<span font_desc=\"Times New Roman 12\">Solde : </span>\n");
        gtk_label_set_markup(GTK_LABEL(LabelNbRepM), "<span font_desc=\"Times New Roman 12\">Nbr de tickets pour le repas : </span>\n");
        gtk_label_set_markup(GTK_LABEL(LabelNbReloadM), "<span font_desc=\"Times New Roman 12\">Nbr de tickets pour rechargement : </span>\n");    
        /* Positionnement des Label */
        gtk_layout_put (GTK_LAYOUT(Layout),LabelGeneral,0,0);
        gtk_layout_put (GTK_LAYOUT(Layout),LabelNomM,50,120);
        gtk_layout_put (GTK_LAYOUT(Layout),LabelPrenomM,50,180);
        gtk_layout_put (GTK_LAYOUT(Layout),LabelNoBadgeM,50,240);
        gtk_layout_put (GTK_LAYOUT(Layout),LabelSoldeM,50,300);
        gtk_layout_put (GTK_LAYOUT(Layout),LabelNbRepM,500,180);
        gtk_layout_put (GTK_LAYOUT(Layout),LabelNbReloadM,500,240);
        /* Création des zones */    
        tableau[0].ZoneNomM = gtk_entry_new();
        tableau[0].ZonePrenomM = gtk_entry_new();
        tableau[0].ZoneNoBadgeM = gtk_entry_new();
        tableau[0].ZoneSoldeM = gtk_entry_new();
        tableau[0].ZoneNbRepM = gtk_entry_new();
        tableau[0].ZoneNbReloadM = gtk_entry_new();
        /* Lecture Port com*/
        char * Tab ;
        Tab = LecturePort();
        FermeCom();
        /* Affectation des zones */
        int Code = 0;
        Code = (int)Tab ;
        free(Tab);
        char chaine[20];
        sprintf(chaine, "%d", Code);
        gtk_entry_set_text(GTK_ENTRY(tableau[0].ZoneNoBadgeM),chaine);
        gtk_entry_set_editable(GTK_ENTRY(tableau[0].ZoneNomM), FALSE);
        //ELEMENT element[1000];
        int i, nombrelement = LectureFichier("tutu2.txt", element);
        for(i = 0; i < nombrelement; i++){
                  if(strcmp(chaine,element[i].code)==0){
                         gtk_entry_set_text(GTK_ENTRY(tableau[0].ZonePrenomM),element[i].prenom);
                         gtk_entry_set_editable(GTK_ENTRY(tableau[0].ZonePrenomM), FALSE);
                         gtk_entry_set_text(GTK_ENTRY(tableau[0].ZoneNomM),element[i].nom);
                         gtk_entry_set_editable(GTK_ENTRY(tableau[0].ZoneNomM), FALSE);
                         gtk_entry_set_text(GTK_ENTRY(tableau[0].ZoneSoldeM),element[i].solde);
                         gtk_entry_set_editable(GTK_ENTRY(tableau[0].ZoneSoldeM), FALSE);
                  }
        }
        /* Positionnement des Zones */
        gtk_layout_put (GTK_LAYOUT(Layout),tableau[0].ZoneNomM,160,120);
        gtk_layout_put (GTK_LAYOUT(Layout),tableau[0].ZonePrenomM,160,180);
        gtk_layout_put (GTK_LAYOUT(Layout),tableau[0].ZoneNoBadgeM,160,240);
        gtk_layout_put (GTK_LAYOUT(Layout),tableau[0].ZoneSoldeM,160,300);
        gtk_layout_put (GTK_LAYOUT(Layout),tableau[0].ZoneNbRepM,550,200);
        gtk_layout_put (GTK_LAYOUT(Layout),tableau[0].ZoneNbReloadM,550,260);
        /* Affichage */
        gtk_widget_show_all(WindowAuto);
        g_signal_connect(G_OBJECT(pButton[0]), "button-press-event", G_CALLBACK( ModeManuel ), WindowAuto);
        g_signal_connect(G_OBJECT(pButton[1]), "button-press-event", G_CALLBACK( AccueilCreation ), WindowAuto);
        g_signal_connect(G_OBJECT(pButton[2]), "button-press-event", G_CALLBACK(  Quitter ), WindowAuto);
        g_signal_connect(G_OBJECT(pButton[3]), "button-press-event", G_CALLBACK(  Valider2 ), &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
     
    //**********************************************************************************************/
    //                                                                                             //
    //           L E C T U R E   P O R T    C O M                                                  //
    //                                                                                             //
    //**********************************************************************************************/
    char * LecturePort(){
         	//Ouverture port série
    	g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PAS_DE_PARITE,BIT_DE_STOP_1);
    	unsigned char* TrameRecue[25];
           unsigned int NbMaxCar=25;
           unsigned int NbCarRecus;
    	unsigned int cpt;
    	cpt=0;
    	while (cpt!=25)
    	{
    		TrameRecue[cpt] = NULL;
    		cpt=cpt+1;
    	}
           int tmpp = 0;
           while (*TrameRecue == 0 ) {
                  ReceptionCom(TrameRecue,NbMaxCar,&NbCarRecus);
           if(*TrameRecue != NULL)
           {
               // traitement
               char TrameTmp[25];
               int cpt2 = 0 ;
               while (cpt2!=25)
    	    {
                  TrameTmp[cpt2] = '0' ;
                  cpt2++;
               }
               itoa((int)*TrameRecue, TrameTmp, 2);
           }
           tmpp++;
           }
           return *TrameRecue ;
    }

  2. #2
    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 peux pas debugger ton code toi même ? J'ai survolé rapidement ton code, je ne vois pas de code de cachage de fenêtre, et ton explication n'est pas des plus limpides non plus. Ta fenêtre redisparaît après s'être affichée ?

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    bah oui, elle s'affiche, elle disparait le temps de lire le port série, et réapparait, et je ne sais pas pourquoi.... puisque justement, il n'y a rien pour cacher la fenêtre... et je débug mon code moi meme quand je le peux, ce que je fais depuis ce matin dailleur, et comme ca, je ne trouve pas l'erreur, je post ici et pendant ce temps je ne glande pas, j'essaye de régler mon écriture fichier qui ne se fait pas comme je le voudrais.

  4. #4
    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
    Ah ok, donc tu nous sous-traites ton boulot de debuggage quoi...

    "Disparaître", ça veut dire que la fenêtre n'est pas du tout affichée à l'écran ? Ou bien que ta fenêtre n'est plus du tout rafraichie et que donc t'as un rectangle gris à l'endroit où ta fenêtre devrait être ?

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    Citation Envoyé par teuf13
    Ah ok, donc tu nous sous-traites ton boulot de debuggage quoi...

    "Disparaître", ça veut dire que la fenêtre n'est pas du tout affichée à l'écran ? Ou bien que ta fenêtre n'est plus du tout rafraichie et que donc t'as un rectangle gris à l'endroit où ta fenêtre devrait être ?
    mais non tu ne comprend pas, je ne sous traite pas, je demande de l'aide quand je ne vois pas ..... je regarde et j'essaye de comprendre (et si je peux de corriger) avant de poster ici. Comme je ne comprend pas, je post, c'est tout simple
    (ps: je ne peux plus me permettre de passer 2 jours à essayer de voir une erreur car je dois finir pour d'ici moins d'une semaine... donc c'est pour ca que j'ai dit, quand je ne comprend pas, je post ici et je fais autre chose en meme temps )

    Donc ma fenêtre se lance avec mon programme, je clique sur mode automatique (ce mode lit le port série) hop ma fentetre disparait (meme dans la barre des taches, quand je suis en mode console, j'ai la console qui apparait, sinon rien) le passe un badge dans mon lecteur, le pc reçoit donc les données et hop elle réapparait avec le N° du badge dans la zone n° badge.
    C'est génant, car apres je dois rajouter un bouton pour pouvoir cliquer dessus et arreter la lecture au cas ou la personne qui passe n'aurait pas de badge, donc si ma fenêtre disparait, on ne peut cliquer pour stopper....

  6. #6
    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
    Si LecturePort bloque jusqu'à ce qu'elle ait reçu des données, ça peut expliquer que ta fenêtre ne s'affiche pas tout de suite.
    schématiquement, ton code a l'air de ressembler à ça
    gtk_widget_destroy (fenetre);
    /* recreation de fenetre */
    LecturePort();
    gtk_widget_show_all (fenetre);


    Et si c'est ça le pb, ça n'a absolument rien à voir avec un pb de gtk+, c'est exactement ce que j'appelle nous refiler ton boulot de debuggage...

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

Discussions similaires

  1. les fenetres fils en gtk+
    Par opensource dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 05/09/2007, 14h45
  2. rafraichir ou mettre à jour la fenetre GTK (ou GTK+ ?) ... :s
    Par lirakien95 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 12/03/2007, 21h20
  3. GTK fenetre transparente
    Par jamfr73 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 23/10/2006, 14h41
  4. Commander des fenêtres gtk avec le shell
    Par clebig dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 31/07/2006, 10h47
  5. probleme execution(fenêtre gtk)
    Par argon dans le forum GTK+ avec C & C++
    Réponses: 15
    Dernier message: 01/05/2006, 11h25

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