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 :

Changer un label en entry


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Par défaut Changer un label en entry
    Bonjour à tous,

    J'aimerais pouvoir pouvoir changer un widget label en un widget entry en cliquant sur un bouton. Au passage le bouton cliqué est remplacé par un autre bouton. J'ai déjà écrit un code mais malheuresement quand je clique sur le bouton, je n'obtiens que le label de base, le widget entry et le le nouveau bouton ne s'affichent pas.
    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
     
    #include <gtk/gtk.h>
    #include <stdlib.h>
     
    void onBtnModifier(GtkWidget* pWidget, gpointer data);
    struct mainWindow
    {
        GtkWidget* pWindow;
        GtkWidget* pLabel;
        GtkWidget* pEntry;
        GtkWidget* pHbox;
        GtkWidget* pBtnModifier;
        GtkWidget* pBtnAppliquer;
    };
    typedef struct mainWindow mainWindow;
    int main(int argc,char **argv)
    {
        GtkWidget* pLabelBase;
        mainWindow* pMain;
        gtk_init(&argc,&argv);
        pMain = (mainWindow*)g_malloc(sizeof(mainWindow));
        //Creation d'un pointeur de la structure mainWindow
        pMain->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        //Creation de la fenetre principale
        gtk_window_set_default_size(GTK_WINDOW(pMain->pWindow),100,200);
        gtk_window_set_title(GTK_WINDOW(pMain->pWindow), "Test Label To Entry");
     
        pLabelBase = gtk_label_new("Titre : ");
        pMain->pLabel = gtk_label_new("Titre de base");
        pMain->pBtnModifier = gtk_button_new_with_label("Modifier");
        pMain->pHbox = gtk_hbox_new(TRUE,2);
        gtk_box_pack_start(GTK_BOX(pMain->pHbox),pLabelBase, TRUE,FALSE,0);
        gtk_box_pack_start(GTK_BOX(pMain->pHbox),pMain->pLabel, TRUE,FALSE,0);
        gtk_box_pack_start(GTK_BOX(pMain->pHbox),pMain->pBtnModifier, TRUE,FALSE,0);
        //Ajout des widgets dans pHbox
     
        g_signal_connect(G_OBJECT(pMain->pWindow),"destroy",G_CALLBACK(gtk_main_quit),NULL);
        g_signal_connect(G_OBJECT(pMain->pBtnModifier),"clicked",G_CALLBACK(onBtnModifier),(gpointer*) pMain);
     
        gtk_container_add(GTK_CONTAINER(pMain->pWindow),pMain->pHbox);
        //Ajout de la hbox pHbox dans la fenetre principale
        gtk_widget_show_all(pMain->pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
    void onBtnModifier(GtkWidget* pWidget, gpointer data)
    {
        const gchar* sText;
        mainWindow *pApp;
        pApp = (mainWindow*) data;
        sText = gtk_label_get_text(GTK_LABEL(pApp->pLabel));
     
        gtk_widget_destroy(pApp->pLabel);
        //Suppression du widget pLabel pour le remplacer par pEntry
        gtk_widget_destroy(pApp->pBtnModifier);
        //Suppression du widget pBtnModifier pour le remplacer par le widget pBtnAppliquer
        pApp->pEntry = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(pApp->pEntry),sText);
        pApp->pBtnAppliquer = gtk_button_new_with_label("Appliquer");
     
        gtk_box_pack_start(GTK_BOX(pApp->pHbox),pApp->pEntry,FALSE,FALSE,0);
        gtk_box_pack_start(GTK_BOX(pApp->pHbox),pApp->pBtnAppliquer,FALSE,FALSE,0);
        //Insertion des nouveaux widgets dans pHbox
    }
    En espérant avoir été assez clair
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 312
    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 312
    Billets dans le blog
    5
    Par défaut
    Tu n'es pas loin de la solution. Deux choses à faire:
    1. Attention lorsqu'on récupère le texte d'un GtkLabel. C'est la donnée interne et non une copie que l'on récupère. Donc soit on fait une copie, soit on traite l'information avant de détruire le GtkLabel en question
    2. Une fois la box modifiée il faut forcer la mise à jour de la fenêtre avec un gtk_widget_show_all(); tout simplement .
    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
    void onBtnModifier(GtkButton *button, gpointer data)
    {
        const gchar* sText;
    	mainWindow *pApp;
    	pApp = (mainWindow*) data;
    	sText = gtk_label_get_text(GTK_LABEL(pApp->pLabel));
     
    	pApp->pEntry = gtk_entry_new();
    	gtk_entry_set_text(GTK_ENTRY(pApp->pEntry),sText);
    	pApp->pBtnAppliquer = gtk_button_new_with_label("Appliquer");
     
    	gtk_widget_destroy(pApp->pLabel);
    	//Suppression du widget pLabel pour le remplacer par pEntry
    	gtk_widget_destroy(pApp->pBtnModifier);
    	//Suppression du widget pBtnModifier pour le remplacer par le widget pBtnAppliquer
     
    	gtk_box_pack_start(GTK_BOX(pApp->pHbox),pApp->pEntry,TRUE,FALSE,0);
    	gtk_box_pack_start(GTK_BOX(pApp->pHbox),pApp->pBtnAppliquer,TRUE,FALSE,0);
    	//Insertion des nouveaux widgets dans pHbox
     
    	// On affiche le tout
    	gtk_widget_show_all(pApp->pWindow);
    }

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Par défaut
    Super, ça marche au poil, mille merci pour ton aide précieuse gerald3d

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

Discussions similaires

  1. file_field tag - changer de label par default
    Par Javix dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 30/01/2009, 09h01
  2. Réponses: 7
    Dernier message: 26/03/2008, 09h23
  3. Comment changer le label des points du TDBChart ?
    Par mimille63 dans le forum Langage
    Réponses: 0
    Dernier message: 11/12/2007, 16h29
  4. Changer un Label et cacher un Button
    Par Xmemy dans le forum Tkinter
    Réponses: 2
    Dernier message: 07/12/2007, 16h09
  5. [W3C] [form] Changer le label d'un bouton
    Par GLDavid dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/07/2007, 09h51

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