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 :

[OCAML] Intialisation d'un notebook sous LABLGTK2+


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut [OCAML] Intialisation d'un notebook sous LABLGTK2+
    Bonjour tout le monde,

    Je suis entrain d'essayer de faire un notebook avec LablGTK2+ et je n'arrive pas à append_page, pour pouvoir lui ajouter des pages et donc l'initialiser.
    Je veux alors, ajouter une vbox à la première "page", avec comme label du tab : Home. Mais j'ai une petite erreur et je ne vois pas d'où elle vient.

    Je vous mets ici le code que j'essaye de compiler :

    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
    open GMain
    open GdkKeysyms
     
    let _ = GMain.init ()
     
    let window = GWindow.window
    	~width:900
    	~height:700
    	~position:`CENTER
    	~resizable:false
    	~title:"Test" ()
     
    let hboxtwo = GPack.hbox
    	~spacing:10
    	~packing: window#add ()
     
    let notebook = GPack.notebook ~packing:hboxtwo#add ()
     
    let fir = GMisc.label ~text:"Home" ()
     
    let vboxtwo = GPack.vbox
    	~spacing:10
    	~packing:(notebook#append_page ~tab_label:fir#coerce) ()
     
    let _ =
    	ignore (window#event#connect#delete confirm);
    	window#show ();
    	GMain.main ()
    Sauf qu'en lançant cela j'ai, comme erreur, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File "t.ml", line 23, characters 10-54:
    Error: This expression has type GObj.widget -> int
           but an expression was expected of type GObj.widget -> unit
           Type int is not compatible with type unit
    Mais ce que je ne comprend pas c'est à quel moment je ressors un int...

    Je voulais donc savoir si quelqu'un s'y connait mieux que moi avec les notebooks et veux bien m'aider pour cette erreur

    Merci d'avance
    Cordialement Rigaux

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    La methode #append_page retourne un int, parce qu'en C elle retourne un int. C'est le même problème / solution qu'avec la méthode #event#connect#delete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ~packing:(ignore (notebook#append_page ~tab_label:fir#coerce))
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    J'avais déjà essayé avec la fonction Ignore mais cela ne marche toujours pas en effet en modifiant ma fonction vboxtwo ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let vboxtwo = GPack.vbox
    	~spacing:10
    	~packing:(ignore (notebook#append_page ~tab_label:fir#coerce)) ()
    J'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    File "t.ml", line 23, characters 18-62:
    Warning 5: this function application is partial,
    maybe some arguments are missing.
    File "t.ml", line 23, characters 10-63:
    Error: This expression has type unit but an expression was expected of type
             GObj.widget -> unit
    Aurais tu une idée ?

  4. #4
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Techniquement il semblerait que tu puisses très bien t'en sortir à l'aide d'une petite fonction utilitaire (qui pourrait très bien avoir sa place dans le module Gaux) :
    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let ignore_apply f obj = 
    	ignore(f obj)
     
    let vboxtwo = GPack.vbox
    	~spacing:10
    	~packing:(ignore_apply (notebook#append_page ~tab_label:fir#coerce)) ()

    Ou bien encore :

    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let notebook_append_page ~tab_label obj =
    	ignore(notebook#append_page ~tab_label obj)
     
    let vboxtwo = GPack.vbox
    	~spacing:10
    	~packing:(notebook_append_page ~tab_label:fir#coerce) ()

    EDIT: Après, au niveau du style, ça me paraît alambiqué, il y a un moyen plus conventionnel qui consiste à se passer de ~packing.

    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let notebook = GPack.notebook ~packing:hboxtwo#add ()
     
    let fir = GMisc.label ~text:"Home" ()
     
    let vboxtwo = GPack.vbox ~spacing:10 () (* pas de ~packing *)
     
    let _ = notebook#append_page ~tab_label:fir#coerce vboxtwo#coerce
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup !

    Cela a marché

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

Discussions similaires

  1. Utilisation de ipython notebook sous windows
    Par Ja Rasta dans le forum Général Python
    Réponses: 0
    Dernier message: 29/11/2016, 21h50
  2. comment lancer ipython notebook sous windows
    Par goldengear dans le forum Général Python
    Réponses: 2
    Dernier message: 15/09/2015, 13h49
  3. Exemple de systemes experts sous Ocaml, scheme et CLIPS
    Par ThE_LaSt dans le forum Langages fonctionnels
    Réponses: 14
    Dernier message: 16/11/2009, 16h01
  4. Ocaml sous Vista
    Par patk29 dans le forum Caml
    Réponses: 20
    Dernier message: 07/02/2008, 18h23
  5. ocaml sous windows avec crimson editor
    Par ghostt2017 dans le forum Caml
    Réponses: 3
    Dernier message: 15/06/2007, 15h15

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