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

Caml Discussion :

[lablgtk2] créer un bouton parcourir


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut [lablgtk2] créer un bouton parcourir
    Salut,
    j'utilise lablgtk2 pour créer une interface graphique.
    Est ce que quelqu'un peut me dire comment créer un bouton parcourir pour charger un fichier.
    par la même occasion comment puis-je faire un save dialogue permettant à l'utilisateur de choisir l'endroit où il veut enregister son travail.

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Un bouton pour sélectionner un fichier : GFile.chooser_button dont la documentation s'obtient avec le nom GtkFileChooserDialog. Du côté de LablGTK l'action à effectuer est déterminée par le paramètre action. Si tu veux ouvrir un fichier, c'est `OPEN. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let open_button = GFile.chooser_button
      ~action:`OPEN
      ~packing:foo#add ()
    Boîte de dialogue d'enregistrement : tu peux utiliser ce même bouton avec `SAVE à la place de `OPEN, ou créer toi-même ta boîte de dialogue. Dans ce cas, il faut jeter un œil à GWindow.file_chooser_dialog.

    Cordialement,
    Cacophrène

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    Je m'excuse pour tout ce temps.

    Merci pour la solution pour commencer. Mais, j'ai pas su comment exploiter le fichier que je viens de sélectionner.

    Autre chose, est ce qu'il y a un moyen de faire un filtre de sorte qu'on n'affiche que les fichiers ayant une extension spécifique pour le cas de OPEN et que les dossiers pour le cas de SAVE.

  4. #4
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Citation Envoyé par amiroushka
    Merci pour la solution pour commencer. Mais, j'ai pas su comment exploiter le fichier que je viens de sélectionner.
    Il faut utiliser la méthode #filename pour récupérer le nom complet du fichier sélectionné (contrairement au bouton GFile.chooser_button, les fenêtres permettent d'effectuer une sélection multiple, donc la méthode #filenames peut aussi être utile).

    Citation Envoyé par amiroushka
    est ce qu'il y a un moyen de faire un filtre de sorte qu'on n'affiche que les fichiers ayant une extension spécifique pour le cas de OPEN et que les dossiers pour le cas de SAVE.
    Il faut voir du côté de GFile.filter. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let latex_filter = GFile.filter
      ~name:"LaTeX files"
      ~patterns:["*.tex"; "*.bib"; "*.idx "; "*.sty"; "*.ist"] ()
    À utiliser avec la méthode #set_filter.

    Cordialement,
    Cacophrène

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    En fait, #filename renvoie un résultat de type "string option".
    J'aimerai savoir c'est quoi un string option et comment faire pour récupérer le nom du fichier du type string

  6. #6
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Citation Envoyé par amiroushka
    En fait, #filename renvoie un résultat de type "string option". J'aimerai savoir c'est quoi un string option et comment faire pour récupérer le nom du fichier du type string
    Le type 'a option permet de renvoyer une valeur ou « rien » (sans lever d'exception). Il est défini de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type 'a option = 
      | None       (* Pas de valeur. *)
      | Some of 'a (* Une valeur de type quelconque. *)
    Il est utilisé par #filename parce que l'utilisateur peut annuler l'ouverture/l'enregistrement, auquel cas aucun chemin n'est disponible à la fermeture de la fenêtre. Pour extraire la valeur, on se sert du filtrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (* val get_contents : 'a option -> 'a *)
    let get_contents = function
      | Some x -> x
      | _ -> raise Not_found
    Cordialement,
    Cacophrène

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    là je comprends pas pourquoi il m'affiche toujours l'exception not found. Pourtant j'ai bien séléctionné un fichier

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    voila en fait le code que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    let open_action=ope#connect#current_folder_changed ~callback: (afficher (get_contents open_bouton#filename))

  9. #9
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Re,

    Citation Envoyé par amiroushka
    là je comprends pas pourquoi il m'affiche toujours l'exception not found. Pourtant j'ai bien séléctionné un fichier
    Ton code donne toujours Not_found parce que l'application partielle est incorrecte. Dans ton callback, open_button#filename est évalué tout de suite et renvoie bien entendu None. Ci-dessous un exemple qui fonctionne (avec les lignes importantes en vert) :

    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
    let _ = GMain.init ()
    
    let window =
      let wnd = GWindow.window 
        ~title:"GtkFileChooserButton Demo"
        ~position:`CENTER
        ~resizable:false
        ~width:300 () in
      wnd#connect#destroy GMain.quit;
      wnd
     
    let vbox = GPack.vbox 
      ~border_width:5
      ~packing:window#add ()
    
    let may_print btn () = Gaux.may print_endline btn#filename
    
    let button = 
      let btn = GFile.chooser_button
        ~action:`OPEN
        ~packing:(vbox#pack ~expand:false) () in
      btn#connect#selection_changed (may_print btn);
      btn
    
    let _ =
      window#show ();
      GMain.main ()
    À noter qu'il y a un module d'aide à la manipulation du type 'a option dans LablGTK.

    Cordialement,
    Cacophrène

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    Merci, tout va bien en ce qui concerne l'action OPEN.

    Mais, pour l'action SAVE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     let save_button=GFile.chooser_button
        ~action: `SAVE
        ~packing:bbox#add()
    ça compile normalement mais au niveau de l'execution il m'affiche le warning suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Gtk-WARNING **: gtk_file_chooser_button_set_property: Choosers of type `GtkFileChooserButton' do not support `GTK_FILE_CHOOSER_ACTION_SAVE'.
    Et au niveau de l'interface, le bouton a le même comportement que celui avec l'action OPEN.
    Est ce qu'il faut ajouter quelque chose pour que ça marche?

  11. #11
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    WARNING **: gtk_file_chooser_button_set_property: Choosers of type `GtkFileChooserButton' do not support `GTK_FILE_CHOOSER_ACTION_SAVE'.
    Hélas non il n'y a rien à ajouter ici... le widget GtkFileChooserButton ne peut pas être utilisé avec l'action `SAVE (hé hé je ne m'en souvenais plus). Il faut donc passer par une boîte de dialogue et un bouton standard (GtkButton). Comme d'habitude les parties importantes sont en vert :

    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
    let dialog =
      let dlg = GWindow.file_chooser_dialog ~action:`SAVE () in
      dlg#add_button_stock `CANCEL `CANCEL;
      dlg#add_select_button_stock `SAVE `SAVE;
      dlg
    
    let may_save () =
      if dialog#run () = `SAVE then Gaux.may print_endline dialog#filename;
      dialog#misc#hide ()
    
    let save_button =
      let btn = GButton.button ~stock:`SAVE () in
      btn#connect#clicked may_save;
      btn
    À toutes fins utiles, je signale que le prochain billet sur mon blog (cf. signature de ce message) présentera le module GWindow en détails. Il devrait être prêt d'ici quelques jours.

    Cordialement,
    Cacophrène

  12. #12
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Citation Envoyé par Cacophrène
    À toutes fins utiles, je signale que le prochain billet sur mon blog (cf. signature de ce message) présentera le module GWindow en détails. Il devrait être prêt d'ici quelques jours.
    Je ne sais pas si ça peut t'aider mais voici le lien vers le billet consacré à GWindow sur mon blog. Il y a un code exemple qui utilise les boîtes de dialogue de type GtkFileChooserDialog avec les modes `OPEN et `SAVE.

    Cordialement,
    Cacophrène

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Et a partir d'un sous menu??
    Bonjour , suite à ce post, j'aurai souhaité savoir comment nous pouvions acceder a cette fenetre du GWindow.file_chooser_dialog en passant non pas par un bouton mais par un sous menu
    Fichier >> Ouvrir
    ou
    Fichier>>Enregistrer

    Mes menus sont déjà créés , mais je n'arrive pas à ouvrir cette fenêtre

    Si quelqu'un pouvait me venir en aide...

    Merci

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Hummm
    S'il vous plait personne pour répondre? le monde fantastique de Caml devient moins fantastique sans aide !

Discussions similaires

  1. [C#] Créer un bouton parcourir
    Par trotters213 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 24/01/2012, 18h22
  2. créer un bouton parcourir et ouvrir l'explorer windows
    Par elpiocky dans le forum wxPython
    Réponses: 3
    Dernier message: 03/06/2010, 11h10
  3. créer un Bouton pour joindre un fichier (parcourir)
    Par orlacit dans le forum Modélisation
    Réponses: 6
    Dernier message: 10/01/2008, 12h19
  4. créer un bouton "Parcourir" dans un formulaire
    Par friald38 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/04/2007, 11h30
  5. Créer un bouton de type "Parcourir"
    Par dessinateurttuyen dans le forum Langage
    Réponses: 11
    Dernier message: 18/08/2006, 13h38

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