OVH Cloud OVH Cloud

[Perl Tk] Boutons de la barre de titre...

5 réponses
Avatar
none
Bonjour,

Je voulais savoir s'il existe un moyen de réaffecter l'action effectuée
lorsqu'on clique sur l'un des 3 boutons en haut et à droite d'une
fenêtre(réduire, agrandir et fermer). Ce serait principalement pour
rediriger le clic sur le bouton quitter vers une fonction Quitter qui
ferait la sortie du programme en douceur.

Merci d'avance.

5 réponses

Avatar
Jérémy JUST
On Fri, 25 Feb 2005 18:20:08 +0100
none <""xxx"@(none)"> wrote:

Je voulais savoir s'il existe un moyen de réaffecter l'action
effectuée lorsqu'on clique sur l'un des 3 boutons en haut et à droite
d'une fenêtre(réduire, agrandir et fermer).


Il me semble que ces boutons sont gérés par le gestionnaire de
fenêtres et que c'est à son niveau que tu peux les paramétrer pour faire
ce que tu veux.


Ce serait principalement pour rediriger le clic sur le bouton quitter
vers une fonction Quitter qui ferait la sortie du programme en
douceur.


Ah, dans ce cas, il te suffit d'attraper le signal envoyé par le
gestionnaire de fenêtres à ton programme. Pour le bouton « Quitter », ce
doit être SIGQUIT ou SIGTERM.

Ça se fait avec un écriture du genre:

local $SIG{QUIT} = sub { print STDERR "Finn" ; die } ;


Tu trouveras des détails et des liens dans:

$ perldoc -q signal

--
Jérémy JUST

Avatar
none
Jérémy JUST wrote:
On Fri, 25 Feb 2005 18:20:08 +0100
none <""xxx"@(none)"> wrote:


Je voulais savoir s'il existe un moyen de réaffecter l'action
effectuée lorsqu'on clique sur l'un des 3 boutons en haut et à droite
d'une fenêtre(réduire, agrandir et fermer).



Il me semble que ces boutons sont gérés par le gestionnaire de
fenêtres et que c'est à son niveau que tu peux les paramétrer pour faire
ce que tu veux.


C'est-à-dire???



Ce serait principalement pour rediriger le clic sur le bouton quitter
vers une fonction Quitter qui ferait la sortie du programme en
douceur.



Ah, dans ce cas, il te suffit d'attraper le signal envoyé par le
gestionnaire de fenêtres à ton programme. Pour le bouton « Quitter », ce
doit être SIGQUIT ou SIGTERM.

Ça se fait avec un écriture du genre:

local $SIG{QUIT} = sub { print STDERR "Finn" ; die } ;


C'est ce qui est dit dans la doc mais il se passe pas grand chose, que
ce soit avec QUIT, TERM, KILL ou HUP...

J'ai fait un copier-coller de la doc et ça fonctionne pas...
Bouhouhouhou :'( :'( :'(


Avatar
jl_morel
Dans l'article <421f5e49$0$19688$, ""xxx"@none" a
dit...

Je voulais savoir s'il existe un moyen de réaffecter l'action effectuée
lorsqu'on clique sur l'un des 3 boutons en haut et à droite d'une
fenêtre(réduire, agrandir et fermer). Ce serait principalement pour
rediriger le clic sur le bouton quitter vers une fonction Quitter qui
ferait la sortie du programme en douceur.



Pour contrôler la fermeture d'un programme Perl/Tk il faut utiliser la
méthode protocol :

$mw->protocol('WM_DELETE_WINDOW' => &Routine_de_fermeture);

La routine sera appelée quand on fermera la fenêtre.
C'est à la routine de gérer la destruction de la fenêtre si on veut fermer
l'application.
Voila un petit script démo :

#!/usr/bin/perl -w
use strict;
use Tk;

my $mw = MainWindow->new(-title => 'Démo');
$mw->setPalette("#92B292");

$mw->protocol('WM_DELETE_WINDOW' => &OnFerme); # gestion fermeture fenêtre

# Remplissage pour faire joli ;-)
my $f = $mw->Frame(-borderwidth => 10, -relief => 'ridge')->pack;
my $img=$mw->Photo(-file => "$Tk::library/demos/images/mickey.gif");
$f->Label(-image => $img)->pack;

MainLoop();

sub OnFerme { # routine d'interception de fermeture
my $rep=$mw->messageBox(-icon => 'question',
-type => 'YesNo',
-default => 'no',
-title => 'Fin ?',
-message => "Voulez-vous quitter ?",
);
if ( lc $rep eq 'yes' ) {$mw->destroy; return} # fermeture demandée
}

__END__

HTH

--
J-L.M.

Avatar
Fabrice L.
Franchement quel talent et quelles connaissances ce monsieur Morel,

Toujours des réponses avisées, courtoises et tres souvent accompagnés d'un
code on ne peut plus explicite.

Franchement, je me lève de mon fauteuil et je vous remercie et felicite pour
ce que vous faites pour notre langage préféré.

Continuez aussi longtemps que dieu vous en donnera la force !

Fabrice.


"Jean-Louis MOREL" a écrit dans le message de
news:421f9e82$0$1234$
Dans l'article <421f5e49$0$19688$, ""xxx"@none" a
dit...

Je voulais savoir s'il existe un moyen de réaffecter l'action effectuée
lorsqu'on clique sur l'un des 3 boutons en haut et à droite d'une
fenêtre(réduire, agrandir et fermer). Ce serait principalement pour
rediriger le clic sur le bouton quitter vers une fonction Quitter qui
ferait la sortie du programme en douceur.



Pour contrôler la fermeture d'un programme Perl/Tk il faut utiliser la
méthode protocol :

$mw->protocol('WM_DELETE_WINDOW' => &Routine_de_fermeture);

La routine sera appelée quand on fermera la fenêtre.
C'est à la routine de gérer la destruction de la fenêtre si on veut fermer
l'application.
Voila un petit script démo :

#!/usr/bin/perl -w
use strict;
use Tk;

my $mw = MainWindow->new(-title => 'Démo');
$mw->setPalette("#92B292");

$mw->protocol('WM_DELETE_WINDOW' => &OnFerme); # gestion fermeture
fenêtre


# Remplissage pour faire joli ;-)
my $f = $mw->Frame(-borderwidth => 10, -relief => 'ridge')->pack;
my $img=$mw->Photo(-file => "$Tk::library/demos/images/mickey.gif");
$f->Label(-image => $img)->pack;

MainLoop();

sub OnFerme { # routine d'interception de
fermeture

my $rep=$mw->messageBox(-icon => 'question',
-type => 'YesNo',
-default => 'no',
-title => 'Fin ?',
-message => "Voulez-vous quitter ?",
);
if ( lc $rep eq 'yes' ) {$mw->destroy; return} # fermeture demandée
}

__END__

HTH

--
J-L.M.




Avatar
none
Je n'ai pas encore essayé mais merci d'avance, cela semble exactement ce
que je souhaitais...

Mille Merci...


Bob l'éponge.



Jean-Louis MOREL wrote:
Dans l'article <421f5e49$0$19688$, ""xxx"@none" a
dit...

Je voulais savoir s'il existe un moyen de réaffecter l'action effectuée
lorsqu'on clique sur l'un des 3 boutons en haut et à droite d'une
fenêtre(réduire, agrandir et fermer). Ce serait principalement pour
rediriger le clic sur le bouton quitter vers une fonction Quitter qui
ferait la sortie du programme en douceur.




Pour contrôler la fermeture d'un programme Perl/Tk il faut utiliser la
méthode protocol :

$mw->protocol('WM_DELETE_WINDOW' => &Routine_de_fermeture);

La routine sera appelée quand on fermera la fenêtre.
C'est à la routine de gérer la destruction de la fenêtre si on veut fermer
l'application.
Voila un petit script démo :

#!/usr/bin/perl -w
use strict;
use Tk;

my $mw = MainWindow->new(-title => 'Démo');
$mw->setPalette("#92B292");

$mw->protocol('WM_DELETE_WINDOW' => &OnFerme); # gestion fermeture fenêtre

# Remplissage pour faire joli ;-)
my $f = $mw->Frame(-borderwidth => 10, -relief => 'ridge')->pack;
my $img=$mw->Photo(-file => "$Tk::library/demos/images/mickey.gif");
$f->Label(-image => $img)->pack;

MainLoop();

sub OnFerme { # routine d'interception de fermeture
my $rep=$mw->messageBox(-icon => 'question',
-type => 'YesNo',
-default => 'no',
-title => 'Fin ?',
-message => "Voulez-vous quitter ?",
);
if ( lc $rep eq 'yes' ) {$mw->destroy; return} # fermeture demandée
}

__END__

HTH