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

Interfaces Graphiques Perl Discussion :

Problème Bind Perl/Tk


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut Problème Bind Perl/Tk
    Bonjour,
    actuellement en train de développer un projet, je me suis retrouvé devant un problème. En effet, lorsque je veux faire un "bind" sur un des cadres de ma fenêtre, je n'obtiens aucune réponse, alors que cela marche si le "bind" est fait sur toute la fenêtre.

    Voici le bout de code concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cadre_grille -> bind ("<ButtonPress-1>", [\&Clique, Ev('x'), Ev('y'), 1]);
    J'ai aussi essayé de le faire sur le canvas contenu dans le cadre, mais pas mieux.

    De plus, j'ai voulu créer une variable grâce à un radiobutton, mais quand je veux l'appelée avec le "bind", j'obtiens toujours la variable à son état de départ, même quand elle est modifiée.

    J'avais essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [\&Clique, Ev('x'), Ev('y'), $taille]

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Tu t'y es juste mal pris. Donc avant de t'aider, faudrait me dire ce que tu veux exactement et me donner un code que tu as écrit qui ne fonctionne pas.

  3. #3
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    alors, mon but est de faire en sorte que quand je clique dans la fenêtre, qui est juste composée d'un canvas je récupère la position de la souris avec les Ev('x') et Ev('y') et je trace une carré de taille $taille.

    Pour le code, le voici :
    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
    #! /usr/bin/perl -w
     
    use strict;
    use warnings;
    use Tk;
     
    my $taille = 10;
     
    my $fenetre = new MainWindow ();
    my $caneva = $fenetre -> Canvas ( -width => 400 , -height => 400) -> pack ( ) ;
    $fenetre -> Entry (-textvariable => \$taille) -> pack ();
    $fenetre -> bind ("<ButtonPress-1>", [\&Clique, Ev('x'), Ev('y'), $taille]);
     
    sub Clique {
    	my ($z,$x,$y,$long) = @_;
    	$caneva -> create ('rectangle',$x-$long,$y-$long,$x+$long,$y+$long, -fill => 'blue');
    }
     
    MainLoop ();
    quand je modifie la valeur dans le "entry", j'obtiens toujours des carrés de 10 de taille

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    au lieu de Tu dois écrire

    et voir même pour être plus propre car la finalité est de tracer un rectangle dans le canvas et non une portion de la fenêtre non canvas.

  5. #5
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    merci, cela résous mon premier problème, cependant, j'ai toujours un problème avec la taille

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Pour la taille, c'est normal car tu passes à ta fonction la valeur de $taille. Et elle quand cette dernière change, ta procédure ne le sait pas car elle n'a eu que la valeur. Le principe est de passer la référence de la variable $taille. Ainsi, au changement de la valeur de $taille, ta fonction le saura étant donnée qu'elle contiendra l'adresse mémoire de $taille (via un déférencement).

    Voici ton code un changé :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Tk;
     
    my $taille = 10;
     
    my $fenetre = new MainWindow( -background => 'red' );
    my $caneva = $fenetre->Canvas(
      -width       => 400,
      -height      => 400,
      -background  => 'snow',
      -borderwidth => 2
    )->pack( qw/-fill both -expand 1/ );
    $fenetre->Entry( -textvariable => \$taille )->pack();
     
    # Je passe la référence à $taille
    $caneva->Tk::bind( "<ButtonPress-1>", [ \&Clique, Ev('x'), Ev('y'), \$taille ] );
     
    sub Clique {
      my ( $widget, $x, $y, $ref_taille ) = @_;
     
      # Dereférence la taille
      my $long = ${$ref_taille};
      $caneva->create( 'rectangle', $x - $long, $y - $long, $x + $long, $y + $long, -fill => 'blue' );
    }
     
    MainLoop();

  7. #7
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    cela fonctionne très bien, merci beaucoup

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

Discussions similaires

  1. problème binding xaml
    Par cyberchand dans le forum C#
    Réponses: 6
    Dernier message: 14/02/2007, 16h10
  2. petit problème variable perl bizzare
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 08/04/2006, 01h01
  3. Problème : incrémentation !! perl a fumé ?
    Par Ickou dans le forum Langage
    Réponses: 11
    Dernier message: 30/11/2005, 17h40
  4. problème avec perl Makefile.PL
    Par flores dans le forum Modules
    Réponses: 2
    Dernier message: 30/10/2005, 19h09
  5. Problème compatibilité PERL SH CSH
    Par minusette dans le forum Modules
    Réponses: 7
    Dernier message: 03/10/2005, 10h03

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