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 :

[lablgtk] changer la valeur d'un spin_button


Sujet :

Caml

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut [lablgtk] changer la valeur d'un spin_button
    Bonjour,
    j'ai cree le spin_button suivant sur une interface graphique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let adj = GData.adjustment ~lower:1.0 ~upper:100.0 ~value:10.
      ~page_incr:5.0 ~step_incr:1.0 ~page_size:0.0 () 
     
    let spin_button = GEdit.spin_button
      ~adjustment:adj
      ~rate:0.0 ~digits:0 ~wrap:false
      ~numeric:true
      ~update_policy:`ALWAYS
      ~packing:paramBox#add ()
    Il est donc possible de faire defiler un nombre entre 1 et 100. Le probleme est que je voudrais recuperer la nouvelle valeur choisie par l'utilisateur pour l'utiliser en parametre d'une fonction SampleSelectedImg.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let samplingButton =
      let samplingButton = GButton.button 
        ~label:"Sampling"
        ~packing:optionBox#add () in
      ignore(samplingButton#connect#clicked 
    	   ~callback:(sampleSelectedImg spin_button#value_as_int));
      samplingButton
    De cette maniere, la fonction ne recoit en parametre que la valeur deja entree dans spin_button (ici 10). Quand on change la valeur, et qu'on rappelle la fonction, elle garde l'anciene valeur en parametre.
    Je me suis donc dit qu'il fallait que je modifie en interne la fonction avec une methode et j'ai trouve ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (*The value that a Spin Button is currently displaying can be changed using the following function:*)
    method set_value : float -> unit
    J'ai ensuite essaye longtemps de l'utiliser avec un boutton, en vain. Voici la derniere fonction que j'ai ecrite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let pasOK =
      let pasOK = GButton.button
        ~label:"pas checked "  
        ~packing:paramBox#add () in
      ignore(pasOK#connect#clicked ~callback:(spin_button#set_value 3.));
      pasOK
    J"ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error: This expression has type unit but an expression was expected of type
             unit -> unit
    make: *** [badaboum] Error 2
    COmment puis-je modifier le champ valeur de spin_value ?
    Merci

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Salut,
    j'ai lu un peu précipitamment ton sujet, désolé si je réponds naïvement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ignore(oK#connect#clicked ~callback:(fun () -> spin_button#set_value 3.));
    Si c'est pas ça je prendrai un peu plus de temps
    -- Yankel Scialom

  3. #3
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    La valeur du champ se modifie a trois mais la vraie valeur reste bloquee a 10. En effet, on lui met 10 au debut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let adj = GData.adjustment ~lower:1.0 ~upper:100.0 ~value:10.
      ~page_incr:5.0 ~step_incr:1.0 ~page_size:0.0 () 
     
    let spin_button = GEdit.spin_button
      ~adjustment:adj
      ~rate:0.0 ~digits:0 ~wrap:false
      ~numeric:true
      ~update_policy:`ALWAYS
      ~packing:paramBox#add ()
    Du coup lorsque je modifie la valeur du spin_button, la valeur interne ne change pas et je n'arrive pas a utiliser la valeur entree dans le champ en parametre de ma fonction. Comment faire pour changer la valeur de cette variable, ~value:10. ?

  4. #4
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Ho oui, j'ai oublié de te le dire. Il est préférable de modifier la valeur de l'adjustment .
    -- Yankel Scialom

  5. #5
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    Je marque donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ignore(pasOK#connect#clicked ~callback:(fun () -> adj#set_value 3.));
    Le probleme reste le meme, changement du chiffre dans le champ de l'interface graphique, mais la vraie valeur reste bloquee a 10. Je pense que la valeur dans l'adj ou dans le spin_button sont les memes quoi qu'il arrive

  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Ceci fonctionne parfaitement chez moi :
    Code ocaml : 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
    let main () =
       (* Window *)
       let window = GWindow.window ~border_width:10 ~width:250
          ~position:`CENTER ()
       in
       
       (* Main layout *)
       let layout = GPack.vbox ~packing:window#add () in
       let packing = layout#pack ~padding:5 in
    
       (* Spin button *)
       let adjustment = GData.adjustment ~lower:1.0 ~upper:100.0
          ~value:10. ~page_incr:5.0 ~step_incr:1.0
          ~page_size:0.0 ()
       in
       let spin_button = GEdit.spin_button ~adjustment
          ~rate:0.0 ~digits:0 ~wrap:false ~numeric:true
          ~update_policy:`ALWAYS ~packing ()
       in
       
       (* Command buttons *)
       let commands = GPack.hbox ~packing () in
       let set_button = GButton.button ~label:"Set to 3"
          ~packing:commands#pack ()
       in
       let quit_button = GButton.button ~label:"Quit"
          ~packing:commands#pack ()
       in
       
       (* callbacks *)
       ignore(quit_button#connect#clicked window#destroy) ;
       ignore(window#connect#destroy GMain.Main.quit) ;
       ignore(set_button#connect#clicked (fun () ->
          adjustment#set_value 3.
       )) ;
       
       window#show () ;
       GMain.Main.main ()
    
    let _ =
       main ()

    Compilé avec ocamlc -I +lablgtk2 -o test-spin lablgtk.cma gtkInit.cmo main.ml.

    Cdlt,
    -- Yankel Scialom

  7. #7
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    Peut-etre que je me suis mal exprime. Le chiffre 10 devient 3 dans le spin button, cela marche chez moi egalement. Seulement je voudrais recuperer cette valeur 3 apparue dans le champ du spin button, pour l'utiliser dans une fonction.

    Pour etre precis, la valeur du champ spin button doit definir la longueur du cote de chaque carre d'un quadrillage applique a une image. L'utilisateur doit pouvoir modifier ce parametre lui meme avec le spin button, il faut donc que je recupere la valeur affichee dans le champ, ce que j'essaye de faire avec ce boutton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let samplingButton =
      let samplingButton = GButton.button 
        ~label:"Sampling"
        ~packing:optionBox#add () in
      ignore(samplingButton#connect#clicked 
    	   ~callback:(sampleSelectedImg spin_button#value_as_int));
      samplingButton
    Le probleme c'est que malgres le set_value qui modifie le champ, la fonction samplingButton ne recupere que 10, soit la valuer de depart et ce, meme si je modifie le champ du spin_button.
    Comment recuperer a chaque fois la nouvelle valeur du spin_button ?
    Merci

  8. #8
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    J'ai trouve la solution !

    boutton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let samplingButton =
      let samplingButton = GButton.button 
        ~label:"Sampling"
        ~packing:optionBox#add () in
      ignore(samplingButton#connect#clicked 
    	   ~callback:(sampleSelectedImg spin_button));
      ignore(samplingButton#connect#clicked (reloadImage ("map_modif.bmp") ));
      samplingButton
    J'ai simplement modifie la fonction, le pas n'existe pas en parametre, elle va le chercher directement dans le spin_button

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let sampleSelectedImg spinner () =
      let pas = spinner#value_as_int
      in
      Sampling.samplingProcess (*fonction externe affichant la grille*)
      (first(chooseImage#get_filenames)) pas

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

    Citation Envoyé par Heavy Metal Hero
    J'ai simplement modifie la fonction, le pas n'existe pas en parametre, elle va le chercher directement dans le spin_button
    C'est surtout que, sous la forme précédente, spin_button#value_as_int n'était évalué qu'une seule fois lors de la définition du callback. Passer spin_button en paramètre fonctionne parce que, justement, la méthode #value_as_int est appelée à chaque fois !

    Cordialement,
    Cacophrène

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

Discussions similaires

  1. [javascript] Changer la valeur de onclick()
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/12/2005, 10h29
  2. [formulaire] changer une valeur affichée
    Par soad dans le forum Access
    Réponses: 8
    Dernier message: 11/10/2005, 18h59
  3. impossible de changer la valeur d'un hidden...
    Par Palmic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/05/2005, 12h06
  4. Changer la valeur sélectionnée d'un <select> en javasc
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/02/2005, 15h53
  5. Changer la valeur de la MTU sur un LAN
    Par nin2 dans le forum Réseau
    Réponses: 3
    Dernier message: 19/02/2005, 15h47

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