OVH Cloud OVH Cloud

perl/tK : couleur d'un labframe

3 réponses
Avatar
fabrice cantin
Bonjour,

Ma question va vous paraitre simple mais je m'arrache les cheveux dessus
depuis une heure :(

Comment on change la couleur à l'interieur d'un labframe. J'ai réussi à
changer la couleur du background mais ce que je veux c'est changer celle à
l'interieur du cadre du labframe.

Merci d'avance.

3 réponses

Avatar
jl_morel
Dans l'article <bmrif3$m55$,
online.fr a dit...

Ma question va vous paraitre simple mais je m'arrache les cheveux dessus
depuis une heure :(

Comment on change la couleur à l'interieur d'un labframe. J'ai réussi à
changer la couleur du background mais ce que je veux c'est changer celle à
l'interieur du cadre du labframe.



Non, c'est pas simple.

On peut utiliser la méthode children pour descendre dans l'arbre des sous-
widget de ce widget composé. On retrouve le widget Text et on peut utiliser
dessus la méthode configure.

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

my $mw = MainWindow->new(-title => 'Exemple de LabFrame');
my $lf = $mw->LabFrame(-label => 'Label du LabFrame',
-labelside => 'acrosstop',
)->pack;

$lf->Text( -width => 40, -height => 5)->pack;

my ($t) = (($lf->children)[0]->children)[1]->children;
$t->configure( -background => 'yellow' );

MainLoop;

__END__


--
J-L.M.

Avatar
fabrice cantin
Merci je suis un peu fatigué pour faire ça mais je test dès demain, et en
effet c'est pas aussi simple que je ne pensais ^^

"Jean-Louis MOREL" a écrit dans le message de news:
bn1jpm$1dt$
Dans l'article <bmrif3$m55$,
online.fr a dit...

Ma question va vous paraitre simple mais je m'arrache les cheveux dessus
depuis une heure :(

Comment on change la couleur à l'interieur d'un labframe. J'ai réussi à
changer la couleur du background mais ce que je veux c'est changer celle
à


l'interieur du cadre du labframe.



Non, c'est pas simple.

On peut utiliser la méthode children pour descendre dans l'arbre des sous-
widget de ce widget composé. On retrouve le widget Text et on peut
utiliser

dessus la méthode configure.

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

my $mw = MainWindow->new(-title => 'Exemple de LabFrame');
my $lf = $mw->LabFrame(-label => 'Label du LabFrame',
-labelside => 'acrosstop',
)->pack;

$lf->Text( -width => 40, -height => 5)->pack;

my ($t) = (($lf->children)[0]->children)[1]->children;
$t->configure( -background => 'yellow' );

MainLoop;

__END__


--
J-L.M.




Avatar
Paul GABORIT
À (at) 20 Oct 2003 21:24:06 GMT,
(Jean-Louis MOREL) écrivait (wrote):
#!/usr/bin/perl -w
use strict;
use Tk;
use Tk::LabFrame;

my $mw = MainWindow->new(-title => 'Exemple de LabFrame');
my $lf = $mw->LabFrame(-label => 'Label du LabFrame',
-labelside => 'acrosstop',
)->pack;

$lf->Text( -width => 40, -height => 5)->pack;

my ($t) = (($lf->children)[0]->children)[1]->children;
$t->configure( -background => 'yellow' );

MainLoop;


À (at) 20 Oct 2003 21:24:06 GMT,
(Jean-Louis MOREL) écrivait (wrote):
[...]
$lf->Text( -width => 40, -height => 5)->pack;
my ($t) = (($lf->children)[0]->children)[1]->children;
$t->configure( -background => 'yellow' );


[...]

On peut faire en deux lignes simples :

my $t = $lf->Text(-width => 40, -height => 5)->pack;
$t->configure( -background => 'yellow' );

qu'on peut remplacer par :

$lf->Text(-width => 40, -height => 5, -background => 'yellow')->pack;

et qui s'écrit encore plus simplement (là, d'accord, ça se discute ;-):

$lf->Text(qw/-width 40 -height 5 -background yellow/)->pack;

Mais c'est peut-être le premier petit-fils (caché) du LabFrame qu'on veut
colorer. Dans ce cas, la méthode est la bonne mais il faut s'arrêter au
petit-fils sans aller à l'arrière petit-fils (*) :

my $petit_fils = ($lf->children)[0]->children[0];
$petit_fils->configure(-background => 'red');

En fait, il y a deux petit-fils (cf. exemple ci-dessous).

On peut aussi colorer le premier fils direct qui est le cadre extérieur (*):

($lf->children)[0]->configure(-background => 'green');

Et le label lui-même (*) :

($lf->children)[1]->configure(-background => 'cyan');

Ce qui donne au final (je ne garantie pas l'harmonie des couleurs ;-) :

my $mw = MainWindow->new(-title => 'Exemple de LabFrame');

my $lf = $mw->LabFrame(-label => 'Label du LabFrame',
-labelside => 'acrosstop',
-background => 'blue',
)->pack;

# un element du LabFrame (j'ai réduit la taille pour qu'on voit les bords)
$lf->Text(qw/-width 5 -height 5 -background yellow/)->pack;

# les deux cadres intérieurs du LabFrame
(($lf->children)[0]->children)[0]->configure(-background => 'red');
(($lf->children)[0]->children)[1]->configure(-background => 'magenta');

# le cadre extérieur du LabFrame
($lf->children)[0]->configure(-background => 'green');

# le label du LabFrame
($lf->children)[1]->configure(-background => 'cyan');


Et là, il ne manque plus que le clignotement pour en faire un vrai sapin de
Noël ;-)

(*) Attention: cela marche avec l'implémentation actuelle des LabFrame mais il
n'y a aucune garantie que cela marche tout le temps...

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>