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 :

Erreur command bound to event


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut Erreur command bound to event
    Bonjour à tous,

    Pour mon stage je dois réaliser un outil en Perl, langage que je n'ai jamais utilisé.

    Après avoir suivi différents cours en ligne, je me suis lancé.
    Malheureusement, je suis bloqué.

    Voici un petit programme totalement inutile mais qui recrée mon erreur.
    J'utilise 3 fichiers :
    - main.pl contenant la fenetre principale
    - choix.pl contenant une fonction qui affiche un liste déroulante
    - info.pl contenant une fonction qui affiche un champ de texte

    Les scripts en questions :

    main.pl
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
    use utf8;
    use Tk;
    require Tk::ErrorDialog;
     
    require 'choix.pl';
    require 'info.pl';
     
    #Declarer les fonctions
    sub Quitter;
     
    #Declrarer variables
    my $fen_principale;
    my $barre_menu;
    my $barre_statut;
    my $menu_gen;
    my $frame_central;
    my $bloc_equipement;
     
    #Creer la fentetre principal
    $fen_principale = MainWindow->new();
    $fen_principale->minsize( '800', '600' );
    $fen_principale->title("TEST");
     
    #Creer barre menu
    $barre_menu = $fen_principale->Frame( -relief => 'groove', -borderwidth => 2 );
     
    #creer barre menu general
    $menu_gen = $barre_menu->Menubutton(
    	-text      => 'Fichier',
    	-tearoff   => 0,
    	-menuitems => [
    		[
    			'command' => 'Quitter',
    			-command  => \&Quitter
    		]
    	]
    );
     
    #Creer widget central
    $frame_central =
      $fen_principale->Frame( -relief => 'groove', -borderwidth => 2 );
     
    #Remplir frame centrale pour choisir truc
    GetWidgetChoix( $frame_central, $bloc_equipement );
     
    # placer les widgets
    $menu_gen->pack( -side => 'left' );
    $barre_menu->pack( -side => 'top', -anchor => 'n', -fill => 'x' );
     
    #$barre_statut->pack( -side => 'bottom', -fill => 'both' );
    $frame_central->pack( -anchor => 'center', -fill => 'both' );
     
    #attendre la modification de la variable bloc equipement avant de continuer la mainloop
    $fen_principale->waitVariable( \$bloc_equipement );
     
    #effacer contenu de la frame centrale
    $frame_central->destroy() if Tk::Exists($frame_central);
    $frame_central =
      $fen_principale->Frame( -relief => 'groove', -borderwidth => 2 )->pack();
     
    #afficher info
    GetWidgetInfo( $frame_central );
     
    #boucle d'interception des evenements
    MainLoop;
     
    #fermer l'application
    sub Quitter {
     
    	exit(0);
    }
     
    __END__
    choix.pl
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
    use utf8;
    use Tk;
    use Tk::BrowseEntry;
     
    #Declarer Variables
    my $choix;
    my $bloc;
     
    #Declarer les fonctions
    sub GetWidgetChoix;
    sub Valider;
     
    sub GetWidgetChoix {
     
    	my $parent = shift;
    	$bloc = \shift;
     
    	$choix = "";
     
    	my $label = $parent->Label( -text => "Choisir :" )->pack();
     
    	my $menu_deroulant_ligne = $parent->BrowseEntry(
    		-label              => 'Choix : ',
    		-variable           => \$choix,
    		-state              => 'readonly',
    		-disabledforeground => 'black',
     
    	)->pack();
     
    	# ajouter nom menu deroulant
    	$menu_deroulant_ligne->insert( 'end', "foo" );
    	$menu_deroulant_ligne->insert( 'end', "bar" );
     
    	my $bouton = $parent->Button(
    		-text    => 'Valider',
    		-command => [ \&Valider ]
    	);
     
    	$bouton->pack();
     
    	$parent->update();
    }
     
    # Modifier valeur bloc equipement, permet reprendre mainloop dans le main
    # args : rien
    # return : rien
    sub Valider {
     
    	$$bloc = "coucou";
     
    }
     
    1;
    info.pl
    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
    use strict;
    use warnings;
    use utf8;
    use Tk;
    use Tk::ROText;
     
    sub GetWidgetInfo {
     
    	my $parent     = shift;
    	my $label      = $parent->Label( -text => "Info Pôle :" )->pack();
     
    	#Creation d'une zone de texte
    	my $labelInfo = $parent->Label(
    		-background => "white",
    		-text       => "test"
    	)->pack();
     
    	$parent->update();
    }
     
    1;
    L'erreur survient une fois le champs de texte affiché, losrque l'on clique dans l'applcation :
    --- Begin Traceback ---
    Can't call method "butUp" on an undefined value at /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/Tk/BrowseEntry.pm line 375.

    <ButtonRelease-1>
    (command bound to event)
    Je suppose que le gestionnaire d'évènements s'attend à ce que la liste déroulante bind mon évènement mais celle-ci est détruite, donc erreur.

    Je n'ai pas trouvé comment résoudre ce problème.

    Merci pour votre aide !

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Quand on débute, le mieux est de commencer par des choses très simples.
    Essaye déjà de n'utiliser qu'un seul script et pas plusieurs.

    Revoit les bases du langages perl, car on ne déclare pas les procédures comme tu le fais, c'est dépassé ça et pas propre du tout.

    Ensuite pour Tk, vas y pas à pas et demande nous des conseils si besoin. Là ton code contient pas mal d'incohérence dans l'utilisation de waitVariable, tes procédures, tes déclarations de procédures, l'utilisation de require, etc etc.

    Donc, pour résumer. commence comme tout le monde par des print bonjour toto, ensuite, essaye de faire de même en Perl Tk.

    Par la suite, fais un petit menu, ensuite rajout d'autres composant, etc etc et demande conseil.

    Là, y a trop de modifications à faire dans ton code et tu t'emmêles les pinceaux dans les déclarations de variables.

    Tu as la http://perl.developpez.com/faq/ à ta disposition ainsi que les tutoriels de dvp.com en perl, puis le forum.

    Bon courage

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut
    Merci pour ta réponse.

    Comment dois-je alors structurer mon application en fonction de ce que me demande mes supérieurs ?

    Je dois écrire différentes parties du logiciel.
    L'idée est que l'on dispose d'une fenêtre principale qui va faire appel à d'autre petit script renvoyant des widgets.
    D'où mon idée de faire un fichier.pl par widget demandé. Après je ne vois pas trop comment lier ces widgets. En regardant les tuto de dvp.com Ca n'explique pas vraiment comment structurer l'application graphique.

    J'ai réalisé les fonctions de traitement en mode console sans trop de difficultés, c'est le passge en mode graphique qui me pose problème.

    Cdlt.

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Déjà ton script principal est un "main.pl", mais pour le reste, ce sera des ".pm".
    Pour tes procédures dans tes .pm, elles devront récupérer les bon arguments pour travailler proprement.

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par défaut
    Citation Envoyé par djibril Voir le message
    Déjà ton script principal est un "main.pl", mais pour le reste, ce sera des ".pm".
    Pour tes procédures dans tes .pm, elles devront récupérer les bon arguments pour travailler proprement.
    Ok merci beaucoup, je me documente et vous recontacte en cas de pépins

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    N'hésite surtout pas à commencer par faire des choses très très simples et à demander sur le forum.

    Je mets ton post en delestage. Tu en recréera un autre si besoin.

    Bon courage.

Discussions similaires

  1. erreur commande bcp
    Par zut94 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/12/2009, 17h51
  2. erreur commande rake
    Par John1234 dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 12/06/2007, 19h11
  3. Réponses: 3
    Dernier message: 23/01/2006, 16h29
  4. [EJB2.1] Erreur not bound
    Par c+cool dans le forum Java EE
    Réponses: 9
    Dernier message: 13/01/2006, 12h11

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