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 :

gtkfilechooserbutton comment obtenir le fichier sélectionné


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 7
    Points : 8
    Points
    8
    Par défaut gtkfilechooserbutton comment obtenir le fichier sélectionné
    Dans une appli conçue avec Glade et GTK3+ je désire obtenir un certain fichier.
    En utilisant le gtkfilechooserbutton celui-ci ouvre GtkFileChooser dans lequel je sélectionne le fichier voulu qui est ensuite affiché dans le gtkfilechooserbutton.

    Si je désire récupérer le nom du fichier j'utilise dans le call back sur le signal file_set gtk_file_chooser_get_filename.

    Le problème vient de ce que le nom retourné par le call back est le nom de la sélection précédente et non pas le nom sélectionné qui est lui affiché correctement dans le button.

    Quelqu'un peut-il m'expliquer pourquoi et ce que je dois faire pour récupérer le nom du fichier sélectionné et non celui de la sélection qui précède.

    Cordialement

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Je suis étonné du comportement que tu indiques.

    Pourrais-tu nous montrer le code source qui génère le souci ?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Je viens de rentrer à la maison. Je peux poser les mains sur le clavier .

    Voila un exemple minimaliste pour obtenir ce que tu cherches :
    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
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
    void
    file_selected_changed_CB (GtkFileChooser *chooser, gpointer user_data)
    {
      gchar *filename = gtk_file_chooser_get_filename (chooser);
      if (!filename) return;
     
      g_print ("The currently file selected : %s\n", filename);
      g_free (filename);
    }
     
    gint
    main (gint argc, gchar *argv[])
    {
      GtkWidget *window = NULL;
      GtkWidget *button = NULL;
     
      /* init gtk */
      gtk_init(&argc, &argv);
     
      /* Création de la fenêtre principale */
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     
      /* Création d'un GtkFileChooserButton */
      button = gtk_file_chooser_button_new ("Choose file...", GTK_FILE_CHOOSER_ACTION_OPEN);
      g_signal_connect (G_OBJECT (button), "selection-changed", G_CALLBACK (file_selected_changed_CB), NULL);
      gtk_container_add (GTK_CONTAINER (window), button);
     
      /* Signaux */
      g_signal_connect (G_OBJECT(window) , "destroy", G_CALLBACK (gtk_main_quit) , NULL);
     
      /* Affichage de la fenêtre */
      gtk_widget_show_all (window);
     
      gtk_main ();
     
      return EXIT_SUCCESS;
    }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Je viens de rentrer à la maison. Je peux poser les mains sur le clavier .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void
    file_selected_changed_CB (GtkFileChooser *chooser, gpointer user_data)
    {
      gchar *filename = gtk_file_chooser_get_filename (chooser);
      if (!filename) return;
     
      g_print ("The currently file selected : %s\n", filename);
      g_free (filename);
    }
    Effectivement Mon résultat est surprenant! Il s'agit en fait d'un artefact.
    J'ai utilisé printf dans le call back, alors qu'un g_print, comme tu l'indiques, fonctionne parfaitement.

    Je le savais pourtant, dans la boucle principale de GTK il ne faut pas utiliser printf, encore une histoire de thread.

    Merci pour ta réponse

    Pierre

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

Discussions similaires

  1. Comment obtenir un fichier .exe ? (le compiler)
    Par Heyloua dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2008, 12h29
  2. [OpenXML] Comment obtenir un fichier XSLT ?
    Par davcha dans le forum Word
    Réponses: 2
    Dernier message: 06/12/2007, 19h27
  3. comment obtenir un fichier WSDL avec Eclipse
    Par thomas3 dans le forum Services Web
    Réponses: 6
    Dernier message: 20/12/2006, 09h01
  4. Réponses: 3
    Dernier message: 13/12/2005, 00h21
  5. Réponses: 2
    Dernier message: 01/12/2005, 13h10

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