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 :

Non Fermeture fenetre


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut Non Fermeture fenetre
    Bonjour,

    J'ai développé une petite interface Tk pour un de mes programmes en perl.
    Un clic sur un bouton entraine l'ouverture d'une fenetre contenant elle même d'autres boutons.

    L'un de ces boutons a pour fonction de faire un destroy de la fenetre (j'ai mis destroy car je n'ai pas trouvé comment fermer ma fenetre sans fermer la fenetre principale).
    Or, a la premiere pression sur le bouton, la fenetre se ferme (donc ok) mais lorsque je décide de la réouvrir pour la refermer, la fermeture ne se fait pas.

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    my $fenetr_secondaire = $fenetre_princ->Toplevel();
     
    my $boutonexit=$mon cadre->Button(-text => "Fermer",
    -command => sun {&fermer_fenetre_secondaire});
     
     
    sub ferme_fenetre_secondaire{
    $fenetr_secondaire->destroy;
    }
    Je ne sais donc pas comment faire.
    Avez vous un idée?

    Merci d'avance.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my $fenetr_secondaire = $fenetre_princ->Toplevel();
    my $boutonexit = $fenetr_secondaire->Button(
      -text    => "Fermer",
      -command => \&fermer_fenetre_secondaire,
    );
     
     
    sub ferme_fenetre_secondaire {
     $fenetr_secondaire->destroy;
    }

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Tout d'abord merci pour t

  4. #4
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse.
    Par contre cela ne fonctionne pas mieux.
    Mon bouton "n'autorise" toujours qu'un seul destroy.
    Le deuxième n'est pas appliqué et ma fenetre reste donc en place.

    Une autre idée?

    De plus j'ai vu que dans le code que tu m'as donné tu sortais mon bouton du cadre que j'avais créé.
    Est-ce nécessaire pour que ça marche?

    Merci d'avance.

  5. #5
    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
    Faudrait donner un peu plus de code pour pouvoir facilement reproduire ton bug, car je n'ai jamais eu ce genre de soucis.

    Merci

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Voici un peu plus de code.
    En espérant que cela te parle...

    Merci encore!

    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
     
    sub modif{   #la fonction permet de modifier certains parametres du programme
     
     
    my $mw2= $mw->Toplevel(); 
    $mw2->title("Modif Parameters"); 
     
    #creation cadre en haut de fenetre
    my $cadre_mw2 = $mw2->Frame->pack(-side => 'top', 
    -fill => 'x'); 
     
    		#ajout du bouton de lancement de l'application
    		my $boutonvalid=$cadre_mw2->Button(-text => "Valider", 
    		-command => \&valid_modif,
    		);
    		$boutonvalid -> grid(-row=>15,-column=>2);
     
     
     
    		#ici je cré deux entrées de texte afin de pouvoir modifier la valeur de certains parametres
    		my $label1=$cadre_mw2-> Label(-text=>"Nom:");
    		$label1 -> grid(-row=>1,-column=>1);
    		my $zone1=$cadre_mw2->Entry(-textvariable => \$nom);
    		$zone1 -> grid(-row=>1,-column=>3);
     
    		my $label2=$cadre_mw2-> Label(-text=>"Prenom:");
    		$label2 -> grid(-row=>2,-column=>1);
    		my $zone2=$cadre_mw2->Entry(-textvariable => \$$Prenom);
    		$zone2 -> grid(-row=>2,-column=>3);
     
     
     
     
    sub valid_modif{  #ce bouton ne permet pas de valider ma modif car avec les references, les parametres sont modifiés seuls...Mais elle en donne l'illusion, elle me permet de fermer la seconde fenetre a l'aide de l'utilisateur
     
     
    	$texte->insert("end","je ne marche pas"); //$texte est un widget présent dans la fenetre principale
    	$mw2->destroy;
    }
     
     
    }

  7. #7
    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
    Voici un conseil pour travailler en perl Tk. La programmation perl Tk nécessite l'usage de multitudes de procédures. De ce fait, je remarque que beaucoup de débutants se baladent avec des variables qui sont déclarées n'importe où et surtout n'importe comment avec des portées pas du tout gérées.
    Je te recommande de prendre l'habitude d'utiliser les pragma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    Et surtout d'apprendre à passer en argument dans tes procédures tout ce dont tu as besoin, c'est à dire même les références aux widgets. Ça évite énormément d'ennuis et de messages d'erreurs.

    Pour reprendre ton code qui n'est pas complet, donc difficile de tout voir (mais bon), voici déjà des modifications apportées :
    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
    sub modif {    #la fonction permet de modifier certains parametres du programme
      my ( $WidgetPricipal, $widget_texte ) = @_;
      my $toplevel = $WidgetPricipal->Toplevel();
      $toplevel->title("Modif Parameters");
     
      #creation cadre en haut de fenetre
      my $cadre_mw2 = $toplevel->Frame->pack(
        -side => 'top',
        -fill => 'x'
      );
     
      #ajout du bouton de lancement de l'application
      my $boutonvalid = $cadre_mw2->Button(
        -text    => "Valider",
        -command => [ \&valid_modif, $widget_texte, $toplevel ],
      );
      $boutonvalid->grid( -row => 15, -column => 2 );
     
      #ici je cré deux entrées de texte afin de pouvoir modifier la valeur de certains parametres
      my $label1 = $cadre_mw2->Label( -text => "Nom:" );
      $label1->grid( -row => 1, -column => 1 );
      my $zone1 = $cadre_mw2->Entry( -textvariable => \$nom );
      $zone1->grid( -row => 1, -column => 3 );
     
      my $label2 = $cadre_mw2->Label( -text => "Prenom:" );
      $label2->grid( -row => 2, -column => 1 );
      my $zone2 = $cadre_mw2->Entry( -textvariable => \$$Prenom );
      $zone2->grid( -row => 2, -column => 3 );
     
      return;
    }
     
    # Ce bouton ne permet pas de valider ma modif car avec les references,
    # les parametres sont modifiés seuls...
    # Mais elle en donne l'illusion, elle me permet de fermer la
    # seconde fenetre a l'aide de l'utilisateur
    sub valid_modif {
      my ( $widget_texte, $widget ) = @_;
     
      #$widget_texte est un widget présent dans la fenetre principale
      $widget_texte->insert( "end", "je ne marche pas" );
      $widget->destroy;
    }
    Si on pouvait déjà avoir le code entier s'il n'est pas trop long, ce serait bien.

  8. #8
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 67
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    En effet en passant mon widget en parametre de ma fonctions le problème est corrigé.
    Merci beaucoup.
    Je prend acte de tes conseils.

    Merci encore.

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

Discussions similaires

  1. Fermeture fenetre crée par code javascript
    Par Kerod dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/02/2010, 00h04
  2. fermeture fenetre
    Par clairette dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/02/2006, 20h16
  3. Probleme fermeture fenetre
    Par lemagicien dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/12/2005, 14h40
  4. Associer Script a la croix rouge fermeture fenetre
    Par Oaurelius dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/11/2005, 18h43
  5. pb fermeture fenetre parent
    Par logica dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/08/2005, 14h07

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