Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Interfaces Graphiques
Interfaces Graphiques Forum d'entraide pour les interfaces graphiques en Perl (TK, GTK, Tk-Zinc, 2D et 3D avec OpenGPL, ....). Avant de poster, veuillez consulter la FAQ Perl/Tk , les cours Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/03/2012, 14h14   #1
Eames38
Membre à l'essai
 
Inscription : mars 2011
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 62
Points : 21
Points : 21
Par défaut "Passage par référence" d'un argument dans une autre fenêtre (subroutine)

Bonjour,

Pour être plus précis j'ai un argument qui doit se mettre automatiquement à jour dans un champ texte (fenetre principale).

J'utilise une fonction qui crée une autre fenêtre. Quand j'appuie sur un des bouton de cette fenêtre, la valeur de l'argument est censé changer, mais ce n'est pas le cas.

Voici un code pour illustrer mon propos.


Code :
1
2
3
4
5
6
7
8
9
10
11
 
my argument;
&subroutine($argument);
my $entry=$frame->Entry(-textvariable => \$argument)->pack(-side => 'left');
 
sub subroutine{
#Création d'une nouvelle fenetre
#...
$_[0]='test';
return;
}
Ca à l'air tout bête, mais ça fait un moment que je galère dessus.

Merci pour votre aide.
Eames38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 14h43   #2
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Bonjour,

Votre code ne nous aide pas à tester votre problématique. Il faudrait un programme plus complet.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 15h11   #3
Eames38
Membre à l'essai
 
Inscription : mars 2011
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 62
Points : 21
Points : 21
Voilà, j'espère que ça sera suffisant.

Code :
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
 
#!/usr/bin/wperl
use warnings;
use strict;
use Tk; 
 
my $argument='';
my $fenetre_principale = MainWindow->new( -title=> 'Main');
 
$fenetre_principale ->Button(-text =>"OpenWindowTest",-command=> sub{
&SubRoutine($fenetre_principale, $argument);
})-pack(-side=>'top');
 
 
my $entry=$fenetre_principale ->Entry(-textvariable => \$argument)->pack(-side => 'left');
 
MainLoop();
 
sub SubRoutine{
my($fenetre_principale,$argument)=@_;
 
my $fenetre_new = $fenetre_principale->Toplevel(-title  =>  "New");
$fenetre_new ->minsize(750,630);
 
$fenetre_new ->Button(-text =>"Confirm",-command=> sub{
$_[1]='test';
})-pack(-side=>'top');
return;
}
}
Eames38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 15h39   #4
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
ce serait bien de donner un programme valide , qui ne retourne pas de message d'erreur. C'est la moindre des choses.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 15h43   #5
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Code :
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
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
 
my $argument = '';
my $fenetre_principale = MainWindow->new( -title => 'Main' );
 
$fenetre_principale->Button(
  -text    => "OpenWindowTest",
  -command => sub {
    &SubRoutine( $fenetre_principale, \$argument );
  }
)->pack( -side => 'top' );
 
my $entry = $fenetre_principale->Entry( -textvariable => \$argument )->pack( -side => 'left' );
 
MainLoop();
 
sub SubRoutine {
  my ( $fenetre_principale, $ref_argument ) = @_;
 
  my $fenetre_new = $fenetre_principale->Toplevel( -title => "New" );
  $fenetre_new->minsize( 750, 630 );
 
  $fenetre_new->Button(
    -text    => "Confirm",
    -command => sub {
      ${$ref_argument} = 'test';
    }
  )->pack( -side => 'top' );
  return;
}
Il faut passer à ta fonction SubRoutine la référence de ta variable. Sinon elle n'aura que la valeur du contenu de cette dernière, et donc, il n'y aura plus de lien avec celle de ton widget texte.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 18h12   #6
Eames38
Membre à l'essai
 
Inscription : mars 2011
Messages : 62
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 62
Points : 21
Points : 21
Merci.
Et désolé pour le code erroné, c'était juste pour illustrer. Mes excuses!
Eames38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h07.


 
 
 
 
Partenaires

Hébergement Web