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 Ouvrir et afficher une image


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut lablgtk2 Ouvrir et afficher une image
    Bonjour,

    Je voudrais ouvrir et afficher une image dans un pack.

    Pour cela, j'ai le code suivant :

    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 affiche btn =
    	match btn with
    		|Some n -> ignore (GMisc.image
    		~file: n
    		~packing:(vbox#pack ~expand:false) ())
    		| _ -> raise IsNone
     
    let button = 
      let btn = GFile.chooser_button
    		~title:"Browse"
        ~action:`OPEN
        ~packing:(item#add) () in
      btn#connect#selection_changed (affiche btn#filename);
      btn
    Je pensais que ça marcherait, mais j'ai l'erreur suivante :

    Error: This expression has type string option/11
    but an expression was expected of type string option/1031
    Je n'avais jamais vu ce type d'erreur avant...

  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,

    Error: This expression has type string option/11 but an expression was expected of type string option/1031
    Cette erreur apparaît dans l'interpréteur. Les nombres qui suivent le type string option indiquent que tu as redéfini une partie des fonctions qui ne marchaient pas, mais pas toutes, de sorte que "plusieurs types" portent le même nom (en fait un seul semble-t-il dans le cas présent, mais OCaml n'a aucun moyen de le garantir). Une solution toute simple consiste à fermer l'interpréteur de commandes et à relancer une session toute neuve.

    Concernant ton code LablGTK, je te donne une version fonctionnelle ci-dessous. Note que l'on préfère généralement créer le widget GMisc.image une seule fois, et ensuite mettre son contenu à jour. Ta fonction affiche peut être grandement simplifiée en utilisant la fonction auxiliaire Gaux.may disponible dans la bibliothèque. Enfin, petit détail, on essaie souvent d'éviter de lever des exceptions en cas d'annulation, il suffit de ne rien faire (mais je ne connais pas ton programme entier et tu as peut-être de bonnes raisons de lever une exception quand affiche reçoit None) :

    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
    let window =
      GMain.init ();
      let window = GWindow.window
        ~title:"GMisc.image example"
        ~width:640 ~height:480
        ~position:`CENTER () in
      window#connect#destroy GMain.quit;
      window
     
    let container = GPack.vbox
      ~spacing:5
      ~border_width:5
      ~packing:window#add ()
     
    let button = GFile.chooser_button
      ~title:"Browse"
      ~action:`OPEN
      ~packing:container#add ()
     
    let image = GMisc.image 
      ~width:560 ~height:400
      ~packing:(container#pack ~expand:false) ()
     
    let _ =
      let display = Gaux.may ~f:image#set_file
      button#connect#selection_changed (fun () -> display button#filename);
      window#show ();
      GMain.main ()
    N'hésite pas à demander si tu as des questions sur ce code !

    Cordialement,
    Cacophrène

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci Cacophrène pour ta réponse !

    Je ne comprends pas très bien les raisons pour lesquelles j'ai eu cette erreur. (Même après avoir avoir relancé des sessions, ça n'a pas fonctionné...)

    (Ton code à une sytaxe error à la dernière ligne quand je compile. Ca doit juste être un problème de ";")
    Je vois comme tu veux faire. C'est vrai que du coup, je ne définis qu'une fois l'image, c'est vraiment bien.

    Je suis peut-être un peu pénible, mais est-ce que mon code ne pourrait pas marcher ? (Même si je vais utiliser le tiens qui est quand même beaucoup mieux. Mais j'aime comprendre pourquoi ça ne marche pas ^^" .)

    Merci beaucoup en tout cas.

  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
    Bonsoir,

    Effectivement, je n'ai pas fait attention en copiant, mon code ne fonctionne pas car il manque un in à la ligne let display = Gaux.may ~f:image#set_file.

    Concernant ton code, aurais-tu la version complète, avec la fenêtre et tout le reste, pour voir exactement ce qui ne va pas ? Avec ces deux fonctions le comportement n'est pas reproductible.

    Cordialement,
    Cacophrène

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Voici mon code (avant que tu ne répondes au topic) : http://pastebin.com/2PMRWUcT

    Je mets le sujet en résolu puisque tu as résolu mon problème.

    J'aurais juste une dernière question : Y'a t-il (j'ai cherché dans la doc mais je n'ai pas trouvé) un moyen de connaître le chemin de l'image que contient GMisc.image ? Par exemple un genre de image#getfilename ? Si non, y'aurai t-il une manière judicieuse de stocker le chemin de mon image pour m'en resservir (sachant que le type string option ne me convient pas, je voudrais juste un 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
    Bonsoir,

    Pourquoi redéfinis-tu le type 'a option dans ton code ? Tes problèmes viennent sans doute de là. Il s'agit d'un type déjà défini dans OCaml, tu n'as pas besoin de le redéfinir.

    Il semblerait que GMisc.image ne permette pas de retrouver le nom du fichier affiché. Les possibilités de stockage sont nombreuses et dépendent beaucoup du nombre de fonctions amenées à utiliser ce fichier. Tu peux trouver pratique de le stocker dans une référence globale visible par presque tout ton code, ou au contraire de laisser ça au niveau local. C'est un peu au cas par cas.

    Cordialement,
    Cacophrène

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

Discussions similaires

  1. [lablgtk] Ouvrir et afficher une image
    Par Hayawan dans le forum Caml
    Réponses: 1
    Dernier message: 20/10/2013, 18h08
  2. Réponses: 1
    Dernier message: 23/10/2011, 20h03
  3. Ouvrir/Afficher une image, pas si facile que ça.
    Par Twubi dans le forum Java ME
    Réponses: 6
    Dernier message: 22/07/2008, 09h48
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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